蓝桥杯学习笔记九:串口收发触发中断加外部中断加滴答定时器中断

擦,检查问题花费了90分钟,最后发现是数据线有问题,换了根线就好了。

想象:

按下KEY1,串口发送:”按下KEY1“(外部中断)

松开KEY1,串口发送”松开KEY1“(外部中断)

上位机发送”0~8“对应lcd显示变化(串口中断)

闹钟:每五秒lcd显示一次红白红白闪烁,并显示”时间到!“(用滴答定时器做)

之前做的Rx的数据接收都是一个字节,那么对于多个字节或者汉字的串口通信应该怎样做?

while(1)
{
HAL_UART_Receive_IT (&huart1 ,(unsigned char *)str ,15);//只开启中断,还没有正式接收数据呢//且必须接收到这么多的字节数才认为时完成中断触发事件

	HAL_UART_Transmit_IT (&huart1 ,"nihao\r\n",sizeof  ("nihao"));//发送”收到“

}


}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	char p[10];
	sprintf (s,"收到");
		sprintf (p," LED%d play",str[0]-48);

	HAL_UART_Transmit_IT (&huart1 ,(unsigned char *)s,strlen (s));//发送”收到“
	LCD_DisplayStringLine(Line4 ,(unsigned char*)p);
}

当没有感应到15个字节的接受,就算没有完成中断触发事件,就不能进入中断,所以就可以一直打印”nihao“,直到输入进去了15个字节的数据就会触发中断,执行callback函数。

观看这个很好

26串口中断收发实例 (基于STM32CubMX和HAL库的STM32微控制器基本外设应用开发)_哔哩哔哩_bilibili

外部中断在cubmx配置很简单,不再记录,很容易实现了上述要求。

那下一步就想着把尽可能多的中断都给整合在这一个工程里面,来让自己直面中断对我的恐惧。

发现不理解的问题,同样的程序,玩了会LCD不显示了,而且串口中断还不能用了,恢复到最初始的代码,也是不能用。

那就再说吧,做点别的。

你可能感兴趣的:(蓝桥杯,单片机,stm32)