STM32G070RBT6基于STM32CubeMX创建串口中断接收数据

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32G070RBT6基于STM32CubeMX创建串口中断接收数据相关的知识,希望对你有一定的参考价值。

STM32G070RBT6基于STM32CubeMX创建串口中断接收数据


✨这里只演示串口接收中断。不包含配置串口发送以及重映射printf函数。

  • 🌻STM32CubeMX配置演示和Keil代码补充全过程演示:

📝重写相关串口中断服务回调函数内容

📗在主程序main.c中添加全局接收字符变量以及串口中断接收数据处理部分内容。

  • ⛳实现串口中断接收字符长度小于10的数据才能完整接收并转发
uint8_t rx_buf;//定义中断接收变量

/*重写串口接收中断回调函数*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

		if(huart->Instance == USART1) 
				HAL_UART_Transmit(&huart1, &rx_buf, 1, 1000);//sizeof(rx_buf)
				HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//sizeof(rx_buf)
		//实现接收字符长度小于10的数据才能完整接收并转发


//在main函数体中添加初始化代码
/* 开启 USART 1 中断 */
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//能够进入回调函数HAL_UART_RxCpltCallback的条件之一:&rx_buf==sizeof(rx_buf)
		HAL_UART_Transmit(&huart1, tx_buf, sizeof(tx_buf), 1000);
		HAL_Delay(1000);

⚡实现串口接收不定长数据

📓在主程序main.c中添加全局接收字符变量以及串口中断接收数据处理部分内容

#define MAX_RECV_LEN 1024         //设定可以接收的最大字节
uint8_t msg_buff[MAX_RECV_LEN] = 0; //接收缓存区
uint8_t * msg = msg_buff;    //定义一个指针指向接收缓存区
int flag = 0;        //接收完成标志
int len_u4=0;  //数据长度记录

/*重写串口接收中断回调函数*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
	
	/*实现串口接收不定长数据*/
	uint8_t ret = HAL_OK;
    msg++;
        len_u4++;//数据长度计数
    if( msg == msg_buff + MAX_RECV_LEN)
    
        msg = msg_buff;
    
         do  
      
        ret = HAL_UART_Receive_IT(&huart1,(uint8_t *)msg,1);            
    while(ret != HAL_OK);
        if(*(msg-1) == '\\n')   //接收以\\n为结尾字符,则表示接收完成
    
        flag  = 1;
    


//在main函数体中添加初始化代码
	/* 开启 USART 1 中断 */
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//能够进入回调函数HAL_UART_RxCpltCallback的条件之一:&rx_buf==sizeof(rx_buf)
		HAL_UART_Transmit(&huart1, tx_buf, sizeof(tx_buf), 1000);
		HAL_Delay(1000);	

🚩实现数据的不定长接收参考:https://blog.csdn.net/weixin_30616969/article/details/99339828

📚程序源码

链接:https://pan.baidu.com/s/1Cg1OnAM1BDUSjpQZgyracg
提取码:crgy

以上是关于STM32G070RBT6基于STM32CubeMX创建串口中断接收数据的主要内容,如果未能解决你的问题,请参考以下文章

STM32G070RBT6基于STM32CubeMX创建串口中断接收数据

STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程

STM32G070RBT6基于STM32CubeMX创建EXTI外部中断工程

STM32G070RBT6基于Arduino框架下点灯程序

STM32G070RBT6基于Arduino框架GPIO外部中断

STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁