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外部中断工程