【STM32+HAL库】---- 串口通过中断模式实现数据收发
硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode
1 新建cubemax工程
1.1 配置系统时钟树
1.2 UART配置
查阅原理图,可知G0开发板的UART2连接到了板卡搭载的ST-Link上,故开启UART即可
UART2对应着PA2,PA3引脚
展开connectivity,找到USART2,模式选择异步通信模式Asynchronous,注意波特率为115200(默认即可)
使能串口中断
1.3 导出工程
...略
2 代码
2.1 定义数组变量
uint8_t main_code[]="code is running!\n";
uint8_t rec_tra_data[1]; /*定义一个数组,用于存放接收和发送的数据*/
2.2 重写中断回调函数
/* USER CODE BEGIN 4 */
/*串口中断回调函数*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart2) /*判断中断源*/
{
HAL_UART_Transmit(&huart2, (uint8_t *)rec_tra_data, 1, 0xffff); /*发送所接收到的数据*/
HAL_UART_Receive_IT(&huart2,(uint8_t *)&rec_tra_data,1); /*再次开启串口接收中断*/
}
}
/* USER CODE END 4 */
2.3 main.c函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
HAL_UART_Transmit(&huart2,"\nFlash Load finished!\n",22,0xffff); /*程序下载完成*/
HAL_UART_Receive_IT(&huart2,(uint8_t *)&rec_tra_data,1); /*开启串口接收中断*/
while (1)
{
HAL_UART_Transmit(&huart2,(uint8_t *)main_code ,strlen(main_code), 0xffff); /*主程序*/
/*其中strlen()函数用于计算参数字节长度*/
HAL_Delay(1000);
}
}
3 实验现象
本文来自博客园,作者:晚风也温柔,转载请注明原文链接:https://www.cnblogs.com/zxr-blog/p/17960807