打開System Core點擊SYS
打開可連續寫入

選用外部時鐘

打開串口一

開啟異步輸出模式

配置引數
無需更改引數 波特率默認為115200 若比賽規定傳輸速率可自行更改

查看原理圖可知USART1本開發板采用PA10與PA9引腳

配置PA10 PA9引腳

打開中斷

配置USART中斷的搶占優先級和回應優先級
因為只有一個外部中斷這里可以隨意配置

系統時鐘配置為80MHZ

按Enter鍵后
點擊ok

時鐘配置完成
工程配置如下


打開檔案
點擊GENERATE CODE生成代碼

點擊Open FolderOpen Project打開工程

編譯后打開usart.c檔案添加如下代碼
stdio.h頭檔案包含了下面要用的函式fputch()
將代碼添加在/* USER CODE BEGIN 0 /與/ USER CODE END 0 */之間避免重新生成工程后代碼消失
類似接下來的代碼都放在USER CODE BEGIN與USER CODE END之間

在usart.c檔案中
重定義fputch()函式
其中函式HAL_UART_Transmit()的作用為傳輸字符,第一個引數為配置usart1的UART_HandleTypeDef結構體,第二個引數為發送字符所在地址,第三個引數為發送位元組數,第四個引數為最多等待時間,
int fputc(int ch, FILE *f)
{ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);}

在main.c檔案中添加如下代碼來測驗串口功能
其中HAL_Delay()函式是基數為0.001秒的延遲函式,這里輸入100進行0.1秒的延遲,避免串口接受軟體例外

點擊debug后配置所用除錯器為CMSIS-DAP Debugger

測驗結果如下

結果正確,串口配置到這里正常,
洗掉while中的代碼
(這兩行代碼是為了便于測驗串口程式是否正常),添加如下代碼
uint8_t Rxbuf[6];
uint8_t Txbuf[]=“發送正常\r\n”;

在main.c中添加兩個全域變數陣列
Rxbuf[ ]陣列用于存放所接收的代碼, Txbuf[ ]用于存放發送字符因函式HAL_UART_Receive_IT()與HAL_UART_Transmit_IT()所接受引數型別為uint8_t及無符號字符型變數型別所以Rxbuf[[ ] Txbuf[ ]變數型別為uint8_t,
HAL_UART_Receive_IT()函式第一個參量為串口UART_HandleTypeDef結構體,第二個引數為獲取字符存放地址,第三個引數為獲取size個字符后產生中斷,HAL_UART_Transmit_IT()同理,
其中Rxbuf[x ]陣列長度為所需接受字符個數長度+2;例如
欲輸入“1234”后產生中斷,則x等于6.
在main.c檔案中添加如下代碼
HAL_UART_Receive_IT(&huart1, Rxbuf, sizeof(Rxbuf));//開啟接收中斷
HAL_UART_Transmit_IT(&huart1,Txbuf,sizeof(Txbuf));

對弱定義函式(可有用戶重新定義的函式型別)
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)進行重定義 此函式可在 
中的找到,在產生接收中斷后會進入此函式,

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit_IT(&huart1, Rxbuf, sizeof(Rxbuf));//發送所接受的值
HAL_UART_Receive_IT(&huart1, Rxbuf, sizeof(Rxbuf));//再次開啟接收中斷
}、
測驗結果如下
,發送兩次1234后的結果正確

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277403.html
標籤:其他
上一篇:Esp8266(NodeMcu)接入新大陸物聯網平臺并且上傳溫濕度
下一篇:【嵌入式】串口通信及其案例
