日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32串口学习(二)

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32串口学习(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天繼續學習stm32的串口編程(利用庫函數)。上次我們說了串口的發送,這次我們說接收。

接收可以用查詢的方法,也可以用中斷。顯然,工程中多用中斷的方式,那么就來看看中斷接收。

代碼其實很簡單,基本的配置不變,在上次的基礎上加一點(優先級的配置和接收中斷的使能)就可以了。

//Usart1 NVIC 配置NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //搶占優先級3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優先級3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟接收中斷,這句話是關鍵
既然開啟了接收中斷,就有對應的中斷服務函數。

void USART1_IRQHandler(void) //串口1中斷服務程序 {u8 rx_data = 0; //用來保存接收到的字節if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷{rx_data = USART_ReceiveData(USART1);//讀取接收寄存器,自動清除中斷位RXNE++rx_data;//方便調試,可以在這里打個斷點} } 這樣就實現了最最基本的功能:用鍵盤發送一個字節,就會進入中斷,從寄存器取出這個字節。

需要說明的是:

1. ?STM32 的發送與接收是通過數據寄存器 USART_DR 來實現的,這是一個雙寄存器,包含了TDR和 RDR。當向該寄存器寫數據的時候,串口就會自動發送,當收到數據的時候,也是存在該寄存器內。

2. ?RXNE(接收數據寄存器非空),當該位被置 1 的時候,就是提示已經有數據被接收到了,并且可以讀出來了。這時候我們要做的就是盡快去讀取 USART_DR,通過讀 USART_DR 可以將該位清零,也可以向該位寫 0,直接清除。?

總結

以上是生活随笔為你收集整理的stm32串口学习(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。