1.實(shí)現(xiàn)平臺(tái)
兩塊STM開發(fā)板,杜邦線;
初始化板子上的串口;
為串口開啟中斷;
根據(jù)需要制定兩個(gè)板子的通訊協(xié)議。
2.實(shí)現(xiàn)過程
2.1協(xié)議制定
在工程實(shí)踐的過程中,常常需要兩個(gè)板子進(jìn)行通訊來實(shí)現(xiàn)功能。現(xiàn)在常常使用的通訊方法常常是CAN通信,TTL通訊,RS485通訊,RS232通訊,I2C,I2S,SPI等。UART也是一種常用的通訊方式,這種通訊方式為全雙工。
制定協(xié)議時(shí)應(yīng)注意以下幾點(diǎn):
起始符,結(jié)束符和校驗(yàn)位 在為制定通訊協(xié)議的時(shí)候,首先應(yīng)該確定發(fā)送數(shù)據(jù)的起始符,結(jié)束符和校驗(yàn)位;在設(shè)置起始符,結(jié)束符的時(shí)候應(yīng)該避免和發(fā)送的內(nèi)容發(fā)生沖突。結(jié)束符最好可以設(shè)置多位,一般可以設(shè)置兩個(gè)位作為結(jié)束符;校驗(yàn)位需要在結(jié)束符之前;起始位一般沒有特殊要求的話,設(shè)置一位即可。
校驗(yàn)方式
一般校驗(yàn)方式可以是奇檢驗(yàn),偶校驗(yàn),CRC校驗(yàn)。現(xiàn)在用的較多的是CRC校驗(yàn),CRC校驗(yàn)可以看引用的第三篇博文,講的比較清楚。
接下來給個(gè)UART通訊例子:
接下來介紹實(shí)現(xiàn)
實(shí)現(xiàn)在STM32ZET6開發(fā)板上,UART4,正點(diǎn)原子
UART4初始化:
1 void UART4_Init(void)
2 {
3 //GPIO端口設(shè)置
4 GPIO_InitTypeDef GPIO_InitStructure;
5 USART_InitTypeDef USART_InitStructure;
6 NVIC_InitTypeDef NVIC_InitStructure;
7 USART_DeInit(UART4); //復(fù)位串口4
8 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4 ,ENABLE);
9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能UART4,GPIOA時(shí)鐘
10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
11 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復(fù)用推挽輸出
13 GPIO_Init(GPIOC, &GPIO_InitStructure);
14 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
15 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
16 GPIO_Init(GPIOC, &GPIO_InitStructure);
17 //UART4 NVIC 配置
18 NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
19 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級(jí)3
20 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子優(yōu)先級(jí)3
21 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
22 NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器
23 //USART 初始化設(shè)置
24 USART_InitStructure.USART_BaudRate = 115200;//一般設(shè)置為9600;
25 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式
26 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位
27 USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗(yàn)位
28 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
29 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式
30 USART_Init(UART4, &USART_InitStructure); //初始化串口
31 USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//開啟中斷
32 USART_Cmd(UART4, ENABLE); //使能串口
33 return ;
34 }
UART中斷函數(shù):
1 u8 uart_flag=0;
2 extern u8 usart_signal[10];
3 u8 UART4_RX_BUF[USART_REC_LEN]; //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).
4 u16 UART4_RX_STA = 0; //接收狀態(tài)標(biāo)記
5 void UART4_IRQHandler(void) //串口4中斷服務(wù)程序
6 {
7 u8 Res;
8 u8 len = 0,v = 0;
9 if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) //接收中斷
10 {
11 Res = USART_ReceiveData(UART4);//(USART1->DR); //讀取接收到的數(shù)據(jù)
12 if((UART4_RX_STA&0x8000)==0)//接收未完成
13 {
14 if(UART4_RX_STA&0x4000)//接收到了0xff
15 {
16 if(Res!=0x0a)
17 {
18 UART4_RX_STA = 0; //接收錯(cuò)誤,重新開始
19 }
20 else
21 {
22 UART4_RX_STA|=0x8000; //接收完成了
23 len = UART4_RX_STA &0x3fff;
24 if(len != 10) // 數(shù)據(jù)長度不是(12-2)
25 {
26 UART4_RX_STA = 0; // 重新開始接收
27 }
28 else
29 {
30 if(UART_check(UART4_RX_BUF) == 1) // 檢測起始符與終止符
31 {
32 for(v = 0;v < 10;v++)
33 {
34 usart_signal[v] = UART4_RX_BUF[v];
35 uart_flag=1;
36 }
37 }
38 else
39 {
40 UART4_RX_STA = 0;
41 }
42 }
43 }
44 }
45 else //還沒收到0Xff
46 {
47 if(Res==0xff)
48 {
49 UART4_RX_STA|=0x4000;
50
51 }
52 else
53 {
54 UART4_RX_BUF[UART4_RX_STA&0X3FFF]=Res ;
55 UART4_RX_STA++;
56 if(UART4_RX_STA>(USART_REC_LEN-1))UART4_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收
57 }
58 }
59 }
60 }
61 }
上一篇:STM32CubeMX關(guān)于燒寫程序的問題記錄
下一篇:USB Device應(yīng)用筆記(基于STM32F103)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 意法半導(dǎo)體緊湊型可配置車規(guī)負(fù)載驅(qū)動(dòng)器具備安全引腳
- 美光宣布在美投資增至 2000 億美元,加建晶圓廠和 HBM 封裝設(shè)施
- AMD舉辦Advancing AI 2025大會(huì):Instinct MI350系列GPU發(fā)布,35倍推理性能提升
- 特斯拉起訴前Optimus機(jī)器人工程師,指控其竊取商業(yè)機(jī)密
- Nordic Semiconductor將在MWC上海2025上展示前沿蜂窩物聯(lián)網(wǎng)解決方案
- SiC 市場的下一個(gè)爆點(diǎn):共源共柵(cascode)結(jié)構(gòu)詳解
- 香港科技大學(xué)工學(xué)院推出擬人化自動(dòng)駕駛系統(tǒng)
- 現(xiàn)代摩比斯推出新型安全技術(shù) 防止追尾碰撞
- 研究人員開發(fā)新型機(jī)器人系統(tǒng) 利用AI賦能機(jī)器人技術(shù)
- 研究人員開發(fā)具有突破性觸覺靈敏度的機(jī)械手 可實(shí)現(xiàn)類人靈巧操作
- Microchip 有獎(jiǎng)問答,信號(hào)增益或?yàn)V波的原始傳感器應(yīng)用方案
- TI汽車方案拼圖,你敢挑戰(zhàn)嗎?
- 有獎(jiǎng)直播 | 英飛凌新型固態(tài)隔離器的創(chuàng)新技術(shù)與應(yīng)用設(shè)計(jì)
- TI MCU 常見問題(FAQ)大搜集
- 雙 11 拯救行動(dòng):用開發(fā)板治愈單身狗之憂桑
- 有獎(jiǎng)直播:安森美光伏和儲(chǔ)能產(chǎn)品介紹
- 直播報(bào)名:TI 用于感測應(yīng)用、帶可配置信號(hào)鏈元素的新型MSP430™ MCU,報(bào)名直播贏雙重好禮!
- 五一活動(dòng)上線!動(dòng)動(dòng)手,一起來場舊物\"勞動(dòng)\"大改造吧
- 華為P10、P10 Plus正式獲得人臉解鎖功能!
- 裁員1200人,CEO離職,日本JDI公司風(fēng)雨飄搖,
- 努比亞發(fā)布nubiaUI正式版系統(tǒng)更新 人臉解鎖速度加快
- 技術(shù)文章—電磁輻射騷擾的原因有哪些
- 小米Max 3來了?新機(jī)通過3C認(rèn)證:米6同款充電器
- V2X技術(shù)時(shí)代已來臨
- MODEL 3 BMS上的高壓檢測與絕緣檢測電路
- 5G自動(dòng)駕駛出租車已上路,敢不敢去坐坐?
- 51單片機(jī)LCD液晶屏按鍵電子時(shí)鐘的設(shè)計(jì)
- 51單片機(jī)對(duì)LCD1602液晶的驅(qū)動(dòng)設(shè)計(jì)