文章目录
一、内容介绍
完成一个STM32的USART串口通讯程序(采用中断方式),要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收
二、CubeMX生成工程
1)创建工程
首先,打开stm32CubeMX,创建一个新的工程,选择所需芯片;
接下来需要对该工程进行一些设置:
①时钟配置
点击左侧System Core,点击“RCC”,将HSE设置为外部晶振;
②设置串口
点击 Connectivity选择USART1串口,将Mode设置为异步通信,可见波特率为115200Bit/s,数据长度为8Bits等参数,以及芯片上的GPIO端口也设置成了对应的形式;
由于采用的是串口中断方式,所以需要勾选NVIC中的USART1 global interrupt(串口中断方式);
③时钟树设置
点击Clock Configuration,将HCLK设置为72MHZ ,回车;
将以上配置完毕后就可以对工程文件进行设置了;
2)导出工程
点击“Project Manager”,设置工程名和路径,以及工程打开的方式:
然后点击“Code Generator”设置生成代码形式,具体如下;
以上设置完成后就可以导出工程了,点击右上角“GENERATE CODE”即可,然后选择Open Project就能在keil中打开该工程。
三、功能实现
1)代码完善
工程打开后如下图所示:
首先,在main.c文件中的main函数之前添加代码:
#define LENGTH 4 //接受缓冲区大小
uint8_t RxBuffer[LENGTH]; //接受缓冲区
uint8_t RxFlag = 0; //接收完成标志;0表示接受未完成,1表示接收完成
然后在main函数内while循环外添加代码表示串口中断模式接收;
HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuffer,LENGTH);
接下来,就需要在While循环内添加代码了;
HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!!!\r\n", 16 , HAL_MAX_DELAY);
HAL_Delay(1000);
if(RxFlag == 1)
{
HAL_UART_Transmit(&huart1,(uint8_t *)"Recevie Success!\n",17,HAL_MAX_DELAY);
break;
}
}
最后,在main函数后面添加中断回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //串口接收中断回调函数
{
if(huart->Instance == USART1) //判断发生接收中断的串口
{
RxFlag=1; //置为接收完成标志
}
}
以上添加完成之后编译没有错误就可以了;
2)代码烧录
①电路连接
电路连接参考之前的博客,这里就不作详细说明了;
②代码烧录
首先,打开烧录软件mcuisp,将USB-TTL串口接入电脑,点击搜索串口即可看到接入的USB串口,然后将传输速率设置115200bit/s;
接下来,找到刚刚在keil中生成的HEX文件,点击“读器件信息”,右侧状态栏里显示一切正常后,就可以点击“开始编程”进行烧录了;
3)结果展示
烧录完成后打开串口调试助手,同样搜索我们的串口,然后把HEX文件添加进去如下图所示:
发送完内容后即可停止接受数据;
四、总结
此次实验不同于之前的用查询方式实现串口通信,串口中断方式可以在发送数据后立马终止接受数据。
五、内容参考
https://blog.csdn.net/ssj925319/article/details/111984002