CUBEMX+HAL库实现STM32串口接收(不定长度)并发送
-
-
- 首先新建一个CUBEMX工程
- 选择你自己开发板的芯片型号
- 设置时钟和串口
- 设置时钟为72MHZ
- 设置串口中断
- 点击小齿轮生成KEIL5的工程
- 设置工程名称及存放位置
- 点击Open Project直接打开生成的32工程
- 在main.c下添加以下变量
- 添加以下函数打开串口一接收中断
- 添加以下串口接收中断回调函数
- 整个工程开发完毕,直接编译并烧录到单片机
- 打开串口助手给单片机发送数据,可以看到单片机返回来的数据
- 这是我自己建立的工程
-
首先新建一个CUBEMX工程
选择你自己开发板的芯片型号
设置时钟和串口
设置时钟为72MHZ
设置串口中断
点击小齿轮生成KEIL5的工程
设置工程名称及存放位置
点击Open Project直接打开生成的32工程
在main.c下添加以下变量
uint8_t RxByte;
uint8_t RxBuff[256];
uint16_t Rx_Count;
添加以下函数打开串口一接收中断
HAL_UART_Receive_IT(&huart1,&RxByte,1);
添加以下串口接收中断回调函数
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE : This function should not be modified, when the callback is needed,the HAL_UART_RxCpltCallback can be implemented in the user file*/RxBuff[Rx_Count++]=RxByte;if(RxByte==0x0A){
while(HAL_UART_Transmit_IT(&huart1,RxBuff,Rx_Count)==HAL_OK);Rx_Count=0;}if(Rx_Count>=254) //数据超出缓存区,报错,可修改缓存区大小{
Rx_Count=0;uint8_t errInfo[]="too many data!!!\r\n";while(HAL_UART_Transmit_IT(&huart1,errInfo,18)==HAL_OK);}while(HAL_UART_Receive_IT(&huart1,&RxByte,1)==HAL_OK);
}
/* USER CODE END 4 */
整个工程开发完毕,直接编译并烧录到单片机
打开串口助手给单片机发送数据,可以看到单片机返回来的数据
这是我自己建立的工程
这是我自己建立的工程