擦,检查问题花费了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不显示了,而且串口中断还不能用了,恢复到最初始的代码,也是不能用。
那就再说吧,做点别的。
|