【STM32+HAL库】---- 串口通过中断模式实现数据收发

硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

1.1 配置系统时钟树

image

1.2 UART配置

查阅原理图,可知G0开发板的UART2连接到了板卡搭载的ST-Link上,故开启UART即可
image
UART2对应着PA2,PA3引脚
image
展开connectivity,找到USART2,模式选择异步通信模式Asynchronous,注意波特率为115200(默认即可)
image
使能串口中断
image

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 实验现象

image

posted @ 2024-01-12 21:50  晚风也温柔  阅读(121)  评论(0编辑  收藏  举报