蓝桥杯嵌入式模板构建_usart

1.配置引脚

在这里插入图片描述
原理图上串口的两个引脚为PA9、PA10

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码实现

注意:
TMD系统时钟配置函数SystemClock_Config();最好是放在main函数开头的位置,放在所有其他模块init函数之前,要不然tmd会产生非常玄学的问题,比如串口发送的是乱码,还尼玛死活看不出来。


void Uart_Func()  //串口发送
{
	if (uwTick - Uart_Delay_uwTick < 1000) return; //每一秒发送一次
		Uart_Delay_uwTick = uwTick;

	sprintf(str, "hello,world!\r\n");
	HAL_UART_Transmit(&huart1, (unsigned char *)str, strlen(str), 50);//发送所用到的函数
}

	USART1_Init();
	HAL_UART_Receive_IT(&huart1, rec_str, 1);//在初始化之后,需要开启中断,否则不能接收到中断

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口回调函数,接受数据后执行任务
{
	Led_Disp(0xaa);
	HAL_Delay(300);
	Led_Disp(0x00);
	
	HAL_UART_Receive_IT(&huart1, rec_str, 1);//每次结束任务后需要再次开启中断
}

3. 注意事项

如果在串口中断里面调用HAL_Delay()函数,则串口中断的优先级必须比滴答定时器的优先级低;因为HAL_Delay()函数是由滴答定时器写的,如果串口优先级比滴答定时器优先级高,则程序会卡住

HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);               //串口优先级设置:抢占优先级1,响应优先级0
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);  //滴答优先级设置:抢占优先级0,响应优先级0,形参TickPriority(所在大函数的入口参数)就是对应的抢占优先级

滴答定时器优先级怎么找?👇
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值