使用cube配置9位串列埠多機通訊

2021-09-29 04:55:07 字數 1295 閱讀 2330

9位串列埠的多機通訊

模擬主從機採用9位串列埠加靜默模式的方式進行多機通訊。

通過串列埠實現多機通訊,採用9資料位的方式,當第九位為1時,表示8位的資料為位址資料,反之為0時表示8位的資料為要傳送的資料,通訊主從模型如下圖所示。

主從模型

stm32串列埠支援9位資料位為多機通訊時使用,多機通訊時從機一般處於靜默模式,喚醒方式有(1)空閒匯流排檢測喚醒(2) 位址標記檢測喚醒 兩種方式,我們採用位址標記檢測喚醒方式,在這個模式裡,如果第9位是1,該位元組被認為是位址,否則被認為是資料。在乙個位址位元組中,如果接收到的位元組與

從機的程式設計位址不匹配時,

從機串列埠

進入靜默模式。此時,接收該位元組既不會設定

空閒中斷

標誌也不會產生中斷或發出dma請求

,當接收到的位元組與接收器內程式設計位址匹配時,

串列埠退出靜默模式。隨後的

資料位元組被正常接收,除錯的時候由於沒有帶9位的串列埠除錯上位機,所以需要使用到邏輯分析儀,採集資料。

使用st的cubemx軟體配置,以f103為例:

1:使能串列埠1,串列埠2,串列埠3;

2:使能串列埠為 多處理器通訊模式;

3:修改資料位為9位,喚醒方式為address mark,然後給3個串列埠依次賦予位址;

4:最後開啟3個串列埠的中斷;

配置圖如下:

假如以串列埠一作為主機,則需要在生成**後在串列埠2,串列埠3的初始化函式中加入

/* user code begin usart2_init 2 */

hal_multiprocessor_entermutemode(&huart2);

/* user code end usart2_init 2 */

/* user code begin usart3_init 2 */

hal_multiprocessor_entermutemode(&huart3);

/* user code end usart3_init 2 */

函式,使其進入靜默模式;

然後按照以上主從模型圖中將串列埠1,2,3連線起來,當串列埠一傳送9位位址加9位資料時,從串列埠收到9位的位址資料如果和自己的位址匹配,會觸發串列埠中斷,然後接收後面的9位資料,然後在中斷處理函式中再次將其進入靜默模式,如果不匹配,便不會觸發中斷,不會接收後面的資料,以此便完成了多處理器通訊過程;

樹莓派4串列埠配置及使用

sudo nano boot cmdline.txt 刪除 console ttyama0,115200 kgdboc ttyama0,115200sudo nano boot config.txt 最後增加下面兩句話 dtoverlay pi3 miniuart bt enable uart 1s...

STM32串列埠9位資料,無奇偶校驗

stm32和stm8的串列埠貌似都可以一次傳送9位資料,最近才注意到這個,在此記錄。一般不帶奇偶校驗位的串列埠資料 起始位 1 資料位 8 停止位 1 帶奇偶校驗位的串列埠資料 起始位 1 資料位 8 校驗位 1 停止位 1 如果資料位為9位,即 起始位 1 資料位 9 停止位 1 9位資料stm8...

52微控制器使用T2串列埠通訊

由於某些要求需要在定時器0和定時器1被占用的條件下進行串列埠通訊。其實也可以將定時器1分時進行,但是本著探索精神,記錄一下定時器2的配置使用。首先在stc的官方資料手冊找到定時器2的介紹 p205 可以看到它有6個暫存器,其中主要是t2con的配置 官方說明的很清楚。其中要將其作為串列埠通訊時鐘,需...