这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】串口FIFO的comGetChar函数的使用方法--from三叶

共1条 1/1 1 跳转至

【转载】串口FIFO的comGetChar函数的使用方法--from三叶

工程师
2024-02-21 00:13:06     打赏

简单使用方式一:

这里用户可以将读取的read值存到一个数组里面,每读取到一次往数组里面存一下。



略微复杂的使用方式二:
比如远程端发送的数据格式如下:



程序代码就可以这样实现:

  1. /*

  2. *********************************************************************************************************

  3. *        函 数 名: main

  4. *        功能说明: c程序入口

  5. *        形    参: 无

  6. *        返 回 值: 错误代码(无需处理)

  7. *********************************************************************************************************

  8. */

  9. int main(void)

  10. {

  11.         uint8_t ucKeyCode;        

  12.         uint8_t read;

  13.         uint8_t ucStatus = 0;  /* 状态机标志 */

  14.         uint8_t ucCount=0, i;

  15.         uint8_t buf[128];

  16.         

  17.         

  18.         bsp_Init();                /* 硬件初始化 */


  19.         bsp_StartAutoTimer(0, 100);        /* 启动1个100ms的自动重装的定时器 */

  20.         

  21.         /* 主程序大循环 */

  22.         while (1)

  23.         {

  24.                 /* CPU空闲时执行的函数,在 bsp.c */

  25.                 bsp_Idle();               

  26.                

  27.                 /* 判断定时器超时时间 */

  28.                 if (bsp_CheckTimer(0))        

  29.                 {

  30.                         /* 每隔100ms 进来一次 */

  31.                         /* 翻转LED2的状态 */

  32.                         bsp_LedToggle(2);        

  33.                 }

  34.                

  35.                 /* 接收到的串口命令处理 */

  36.                 if (comGetChar(COM1, &read))

  37.                 {

  38.                         switch (ucStatus)

  39.                         {

  40.                                 /* 状态0保证接收到0x01 */

  41.                                 case 0:

  42.                                         if(read == 0x01)

  43.                                         {

  44.                                                 ucStatus = 1;        

  45.                                         }

  46.                                         break;

  47.                                        

  48.                                 /* 状态1保证接收到0x03 */

  49.                                 case 1:

  50.                                         if(read == 0x03)

  51.                                         {

  52.                                                 ucStatus = 2;

  53.                                         }

  54.                                         else

  55.                                         {

  56.                                                 ucStatus = 0;

  57.                                         }

  58.                                         break;

  59.                                        

  60.                                 /* 状态2保证接收到0x0E */

  61.                                 case 2:

  62.                                         if(read == 0x0E)

  63.                                         {

  64.                                                 ucStatus = 3;

  65.                                         }

  66.                                         else

  67.                                         {

  68.                                                 ucStatus = 0;

  69.                                         }

  70.                                         break;


  71.                                 case 3:

  72.                                         buf[ucCount] = read;

  73.                                        

  74.                                         /* 接收够15个数据 */

  75.                                         if(ucCount == 15)

  76.                                         {

  77.                                                 /* 打印接收到的数据值 */

  78.                                                 printf("接收到的数据:");

  79.                                                 for(i = 0; i < ucCount + 1; i++)

  80.                                                 {

  81.                                                         printf("%x ", buf[i]);

  82.                                                 }

  83.                                                 printf("\r\n");

  84.                                                 ucStatus = 0;

  85.                                                 ucCount=0;

  86.                                         }

  87.                                         else

  88.                                         {

  89.                                                 ucCount++;

  90.                                         }

  91.                                         break;

  92.                                 

  93.                                 default:

  94.                                         break;

  95.                         }

  96.                 }

  97.                

  98.         }

  99. }

来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]