【M61学习笔记第四节】串口控制红绿灯

[复制链接]
查看1449 | 回复13 | 2023-11-21 23:03:02 | 显示全部楼层 |阅读模式
    在使用串口1发送LED1_ON,LED1_OFF来控制RGB灯的亮灭。


这里串口一使用的是USB转TTL模块,没有的同学可以直接使用UART0的资源。
屏幕截图 2023-11-21 225449.png

    下面是具体代码,感兴趣的小伙伴可以玩下。

  1. #include "bflb_mtimer.h"
  2. #include "bflb_gpio.h"
  3. #include "board.h"
  4. #include "bflb_uart.h"
  5. #include "string.h"

  6. struct bflb_device_s *uart1;
  7. struct bflb_device_s *gpio;

  8. static uint8_t rx_buf[20];
  9. static uint8_t count = 0;

  10. #define LED1_ON "LED1_ON\r\n"
  11. #define LED1_OFF "LED1_OFF\r\n"
  12. #define LED2_ON "LED2_ON\r\n"
  13. #define LED2_OFF "LED2_OFF\r\n"
  14. #define LED3_ON "LED3_ON\r\n"
  15. #define LED3_OFF "LED3_OFF\r\n"

  16. void switch_function(uint8_t* rx_buf)
  17. {
  18.     if(strstr(LED1_ON, (char*)rx_buf))
  19.     {
  20.         printf("LED1_ON\r\n");
  21.         bflb_gpio_set(gpio, GPIO_PIN_12);
  22.     }else if(strstr(LED1_OFF, (char*)rx_buf))
  23.     {
  24.         printf("LED1_OFF\r\n");
  25.         bflb_gpio_reset(gpio, GPIO_PIN_12);
  26.     }else if(strstr(LED2_ON, (char*)rx_buf))
  27.     {
  28.         printf("LED2_ON\r\n");
  29.         bflb_gpio_set(gpio, GPIO_PIN_14);
  30.     }else if(strstr(LED2_OFF, (char*)rx_buf))
  31.     {
  32.         printf("LED2_OFF\r\n");
  33.         bflb_gpio_reset(gpio, GPIO_PIN_14);
  34.     }else if(strstr(LED3_ON, (char*)rx_buf))
  35.     {
  36.         printf("LED3_ON\r\n");
  37.         bflb_gpio_set(gpio, GPIO_PIN_15);
  38.     }else if(strstr(LED3_OFF, (char*)rx_buf))
  39.     {
  40.         printf("LED3_OFF\r\n");
  41.         bflb_gpio_reset(gpio, GPIO_PIN_15);
  42.     }else{
  43.         printf("ERR COMMAND\r\n");
  44.     }
  45.     count = 0;
  46.     //printf("     %s",(char*)rx_buf);
  47.     memset(rx_buf, '\0', 20);
  48. }

  49. void uart_isr(int irq, void* arg)
  50. {
  51.     uint8_t byte;
  52.     uint32_t intstatus = bflb_uart_get_intstatus(uart1);
  53.     if( intstatus && UART_INTCLR_RTO)
  54.     {
  55.         while(bflb_uart_rxavailable(uart1))
  56.         {
  57.             byte = bflb_uart_getchar(uart1);
  58.             rx_buf[count] = byte;
  59.             count++;
  60.             if (count >= 11)
  61.             {
  62.                 count = 0;
  63.                 memset(rx_buf, '\0', 20);
  64.             }
  65.             while('\n'==byte)
  66.             {
  67.                 switch_function(rx_buf);
  68.                 break;
  69.             }
  70.         }
  71.     }
  72.     bflb_uart_int_clear(uart1, UART_INTCLR_RTO);
  73. }

  74. int main(void)
  75. {
  76.     board_init();


  77.     gpio = bflb_device_get_by_name("gpio");
  78.     uart1 = bflb_device_get_by_name("uart1");

  79.     struct bflb_uart_config_s  cfg =
  80.     {
  81.         .baudrate = 2000000,
  82.         .data_bits = UART_DATA_BITS_8,
  83.         .stop_bits = UART_STOP_BITS_1,
  84.         .parity = UART_PARITY_NONE,
  85.         .flow_ctrl = 0,
  86.         .tx_fifo_threshold = 4,
  87.         .rx_fifo_threshold = 4,
  88.     };

  89.     bflb_gpio_uart_init(gpio, GPIO_PIN_0, GPIO_UART_FUNC_UART1_TX);
  90.     bflb_gpio_uart_init(gpio, GPIO_PIN_1, GPIO_UART_FUNC_UART1_RX);
  91.     bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_OUTPUT|GPIO_PULLUP);
  92.     bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT|GPIO_PULLUP);
  93.     bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT|GPIO_PULLUP);

  94.     bflb_uart_init(uart1, &cfg);

  95.     bflb_uart_txint_mask(uart1, false);
  96.     bflb_uart_rxint_mask(uart1, false);
  97.     bflb_irq_attach(uart1->irq_num, uart_isr, NULL);
  98.     bflb_irq_enable(uart1->irq_num);

  99.     while(1)
  100.     {
  101.     }
  102. }
复制代码
    参考文章:


(十)零基础开发小安派-Eyes-S1【外设篇】——UART
http://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=41803
(出处: 物联网开发者社区-安信可论坛)




屏幕截图 2023-11-21 213912.png
回复

使用道具 举报

WangChong | 2023-11-21 23:24:32 | 显示全部楼层
学习了
回复

使用道具 举报

silyhah | 2023-11-22 00:48:38 来自手机 | 显示全部楼层
WangChong 发表于 2023-11-21 23:24
学习了

互相学习,互相学习
回复 支持 反对

使用道具 举报

Bei_Feng | 2023-11-22 01:36:58 | 显示全部楼层
学习了
回复

使用道具 举报

bzhou830 | 2023-11-22 08:39:10 | 显示全部楼层
选择去发光,而不是被照亮
回复

使用道具 举报

WT_0213 | 2023-11-22 08:46:07 | 显示全部楼层
写的很好
回复

使用道具 举报

496199544 | 2023-11-22 09:46:16 | 显示全部楼层
学习了
回复

使用道具 举报

silyhah | 2023-11-22 22:59:10 | 显示全部楼层

互相学习
回复 支持 反对

使用道具 举报

silyhah | 2023-11-22 23:00:47 | 显示全部楼层

感谢评价
回复 支持 反对

使用道具 举报

silyhah | 2023-11-22 23:03:12 | 显示全部楼层

互相学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则