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的配置 官方說明的很清楚。其中要將其作為串列埠通訊時鐘,需...