【STM32的HAL库开发】串口控制台的实现

【STM32的HAL库开发】串⼝控制台的实现
【STM32的HAL库开发】串⼝控制台
南海纪行在串⼝中断中逐字节接收XCOM发来的指令。XCOM在发送⽂本时会⾃动附加 0x0a 0x0d (ASCII: \r\n )两个字符。因此每当接收到0x0d时就给控制台的 console_exe() 插旗 (CONSOLE_FLAG) ,在 main.c 的主循环中扫描该旗⼦。傅里叶红外光谱仪
/**
* @brief This function handles USART1 global interrupt.
*/
广西劳动力市场void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t temp;
if(USART1->SR & 0x00000020){
temp = USART1->DR;
RX_BUFF[RX_CNT++] = temp;
if(temp==0x0d)console_setflag();
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
__HAL_UART_ENABLE_IT(&huart1,UART_IT_ERR);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
/
* USER CODE END USART1_IRQn 1 */
}
控制台定向函数
若未插旗则直接return,否则⽐较接收到的字符与预设的指令,进⼊不同的响应函数;若未匹配到⼀致的函数则返回熟悉的错误提⽰。在exe函数的末尾清空串⼝接收缓存。LED_Y作为指⽰灯,可以去掉。
温州医学院学报void console_exe(void){
if(!CONSOLE_FLAG){
return;
}else{
CONSOLE_FLAG = 0;
}
printf("console> ");
豹团网if(!strcmp(RX_BUFF,"hi\r\n"))      {printf("yo~");}
else if(!strcmp(RX_BUFF,"battery\r\n")) {cmd_battery();}
else if(!strcmp(RX_BUFF,"exit\r\n"))  {cmd_exit();}
else if(!memcmp(RX_BUFF,"flash",5))  {cmd_flash();}
else {
printf("unknown cmd '%s'",RX_BUFF);
cmd_help();
}
printf("\r\n");
for(;RX_CNT!=0;RX_CNT--)RX_BUFF[RX_CNT] = 0;
LED_Y = !LED_Y;
}
实测
>金山毒霸2007

本文发布于:2024-09-22 03:29:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/200431.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:接收   函数   控制台
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议