單片機基礎——使用USART發送和接收數據(中斷模式)


1. 准備工作

硬件准備

  • 首先需要准備一個開發板,這里我准備的是STM32L4的開發板(BearPi):

 

 

2.生成MDK工程

選擇芯片型號

打開STM32CubeMX,打開MCU選擇器:

 

 搜索並選中芯片STM32L431RCT6:

 

 

配置時鍾源

  • 如果選擇使用外部高速時鍾(HSE),則需要在System Core中配置RCC;
  • 如果使用默認內部時鍾(HSI),這一步可以略過;

這里我都使用外部時鍾:

 

 

配置串口

小熊派開發板板載ST-Link並且虛擬了一個串口,原理圖如下:

 

 

這里我將開關撥到AT-MCU模式,使PC的串口與USART1之間連接。

接下來開始配置USART1

 

 

NVIC配置

在NVIC中配置USART中斷優先級:

 

 

配置時鍾樹

STM32L4的最高主頻到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

 

 

 

 

生成工程設置

 

 

代碼生成設置

最后設置生成獨立的初始化文件:

 

 

生成代碼

點擊GENERATE CODE即可生成MDK-V5工程:

 

 

3. 在MDK中編寫、編譯、下載用戶代碼

定義發送和接收緩沖區

1 /* Private user code ---------------------------------------------------------*/
2 /* USER CODE BEGIN 0 */
3 uint8_t hello[] = "quot;USART1 is ready...\n";
4 uint8_t recv_buf;
5 /* USER CODE END 0 */

## 重新實現中斷回調函數 在NVIC一講中我們探索了HAL庫的中斷處理機制,HAL中弱定義了一個中斷回調函數 `HAL_UART_RxCpltCallback`, 我們需要在用戶文件中重新定義該函數,放在哪都可以,這里我放在 `main.c` 中:

 1 /* USER CODE BEGIN 4 */
 2 /* 中斷回調函數 */
 3 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
 4 {
 5     /* 判斷是哪個串口觸發的中斷 */
 6     if(huart ->Instance == USART1)
 7     {
 8         //將接收到的數據發送
 9         HAL_UART_Transmit(huart, &recv_buf, 1,0);
10         //重新使能串口接收中斷
11         HAL_UART_Receive_IT(huart, &recv_buf, 1);
12     }
13 }
14 /* USER CODE END 4 */
View Code

修改main函數

在main函數中首先開啟串口中斷接收,然后發送提示信息:

 1 int main(void)
 2 {
 3   HAL_Init();
 4 
 5   SystemClock_Config();
 6 
 7   MX_GPIO_Init();
 8   MX_USART1_UART_Init();
 9 
10   /* USER CODE BEGIN 2 */
11   //使能串口中斷接收
12   HAL_UART_Receive_IT(& huart1, & recv_buf, 1);
13   //發送提示信息
14   HAL_UART_Transmit_IT(&huart1, (uint8_t*)hello, sizeof(hello));
15   /* USER CODE END 2 */
16 
17   while (1)
18   {
19   }
20 }
View Code

編譯代碼

點擊如圖所示的按鈕編譯工程

 

 編譯成功

 

 

設置下載器

點擊如圖所示按鈕打開設置頁面

 

 進行下載設置,選擇“ST-Link Debugger”,並點擊“Settings”。

 

 在“Flash Download”菜單下勾選“Reset and Run”選項,已達到燒錄程序后單片機自動復位並運行程序的目的。

 

 

下載運行

點擊"LOAD"按鈕即可燒錄代碼到單片機中。

 

 燒錄成功

 

 

實驗現象

下載運行后,實驗現象如下:

 

 至此,我們已經學會了如何配置USART使用中斷模式發送和接收數據,下一節將討論如何配置USART使用DMA模式發送數據和接收數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM