STM32H750用CUBEMX配置串口中断接收(带freertos)

目录

1、CUBEMX勾选全局中断,生成代码

2、在usart.c文件头部定义接收缓冲区以及定义函数

​编辑

3、在usart.h文件添加extern变量声明

4、在main.c主函数里添加接收中断开启

5、在main.c末尾定义串口中断回调函数

6、编译,烧录,测试效果如图,发送什么返回什么

 7、注意&不确定

9、工程源文件


1、CUBEMX勾选全局中断,生成代码

2、在usart.c文件头部定义接收缓冲区以及定义函数

        这里避免使用半主机模式很重要,不能少。

/* USER CODE BEGIN 0 */
uint8_t usart1_receive_buffer[UART1_RX_LENGTH] = {0}; // 接收缓冲区  
uint8_t rx1_temp_char = 0; // 用于存储接收到的单个字符

struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	
	 HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x0001);  
	return ch;
}


/* USER CODE END 0 */

        记得在KEIL勾选这个。

3、在usart.h文件添加extern变量声明

/* USER CODE BEGIN Private defines */
#define UART1_RX_LENGTH 1024
extern uint8_t usart1_receive_buffer[UART1_RX_LENGTH]; // 接收缓冲区 
extern uint8_t rx1_temp_char; // 用于存储接收到的单个字符 
/* USER CODE END Private defines */

4、在main.c主函数里添加接收中断开启

/* USER CODE BEGIN 2 */
	HAL_UART_Receive_IT(&huart1, &rx1_temp_char, 1);
  /* USER CODE END 2 */

5、在main.c末尾定义串口中断回调函数

/* USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  static uint16_t usart1_rx_counter = 0; // 接收计数器  
  UNUSED(huart); //消除警告
  	
	if(usart1_rx_counter < UART1_RX_LENGTH)  
		{
			usart1_receive_buffer[usart1_rx_counter++] = rx1_temp_char;   //接收数据转存
			if(rx1_temp_char == '\n')
			{
			 //将'\n'(usart1_rx_counter)后面的数据清空; usart1_receive_buffer[0] = NULL表示将整个数组清空
			 usart1_receive_buffer[usart1_rx_counter] = NULL;
			 usart1_rx_counter = 0;	
			 //printf("%s",usart1_receive_buffer);  //测试语句,不需要可以删除
			}
		}	
	 HAL_UART_Receive_IT(&huart1, (uint8_t *)&rx1_temp_char, 1);   //再开启接收中断

}
/* USER CODE END 4 */

6、编译,烧录,测试效果如图,发送什么返回什么

        在输入数据时记得多加一个回车。

 7、注意&不确定

        在初始化串口中断优先级时,不宜把优先级设置得太低,不然一直被freertos系统时钟抢占。但是不能和系统时钟中断冲突,原谅下,freertos没怎么细学。实测F2,F4系列单片机同样配置也是没有问题的。

9、工程源文件

        gitee仓库地址:https://gitee.com/SongYang030108/stm32-h750_-cubemx_freertos

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值