在使用串口1发送LED1_ON,LED1_OFF来控制RGB灯的亮灭。
这里串口一使用的是USB转TTL模块,没有的同学可以直接使用UART0的资源。
下面是具体代码,感兴趣的小伙伴可以玩下。
- #include "bflb_mtimer.h"
- #include "bflb_gpio.h"
- #include "board.h"
- #include "bflb_uart.h"
- #include "string.h"
- struct bflb_device_s *uart1;
- struct bflb_device_s *gpio;
- static uint8_t rx_buf[20];
- static uint8_t count = 0;
- #define LED1_ON "LED1_ON\r\n"
- #define LED1_OFF "LED1_OFF\r\n"
- #define LED2_ON "LED2_ON\r\n"
- #define LED2_OFF "LED2_OFF\r\n"
- #define LED3_ON "LED3_ON\r\n"
- #define LED3_OFF "LED3_OFF\r\n"
- void switch_function(uint8_t* rx_buf)
- {
- if(strstr(LED1_ON, (char*)rx_buf))
- {
- printf("LED1_ON\r\n");
- bflb_gpio_set(gpio, GPIO_PIN_12);
- }else if(strstr(LED1_OFF, (char*)rx_buf))
- {
- printf("LED1_OFF\r\n");
- bflb_gpio_reset(gpio, GPIO_PIN_12);
- }else if(strstr(LED2_ON, (char*)rx_buf))
- {
- printf("LED2_ON\r\n");
- bflb_gpio_set(gpio, GPIO_PIN_14);
- }else if(strstr(LED2_OFF, (char*)rx_buf))
- {
- printf("LED2_OFF\r\n");
- bflb_gpio_reset(gpio, GPIO_PIN_14);
- }else if(strstr(LED3_ON, (char*)rx_buf))
- {
- printf("LED3_ON\r\n");
- bflb_gpio_set(gpio, GPIO_PIN_15);
- }else if(strstr(LED3_OFF, (char*)rx_buf))
- {
- printf("LED3_OFF\r\n");
- bflb_gpio_reset(gpio, GPIO_PIN_15);
- }else{
- printf("ERR COMMAND\r\n");
- }
- count = 0;
- //printf(" %s",(char*)rx_buf);
- memset(rx_buf, '\0', 20);
- }
- void uart_isr(int irq, void* arg)
- {
- uint8_t byte;
- uint32_t intstatus = bflb_uart_get_intstatus(uart1);
- if( intstatus && UART_INTCLR_RTO)
- {
- while(bflb_uart_rxavailable(uart1))
- {
- byte = bflb_uart_getchar(uart1);
- rx_buf[count] = byte;
- count++;
- if (count >= 11)
- {
- count = 0;
- memset(rx_buf, '\0', 20);
- }
- while('\n'==byte)
- {
- switch_function(rx_buf);
- break;
- }
- }
- }
- bflb_uart_int_clear(uart1, UART_INTCLR_RTO);
- }
- int main(void)
- {
- board_init();
- gpio = bflb_device_get_by_name("gpio");
- uart1 = bflb_device_get_by_name("uart1");
- struct bflb_uart_config_s cfg =
- {
- .baudrate = 2000000,
- .data_bits = UART_DATA_BITS_8,
- .stop_bits = UART_STOP_BITS_1,
- .parity = UART_PARITY_NONE,
- .flow_ctrl = 0,
- .tx_fifo_threshold = 4,
- .rx_fifo_threshold = 4,
- };
- bflb_gpio_uart_init(gpio, GPIO_PIN_0, GPIO_UART_FUNC_UART1_TX);
- bflb_gpio_uart_init(gpio, GPIO_PIN_1, GPIO_UART_FUNC_UART1_RX);
- bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_OUTPUT|GPIO_PULLUP);
- bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT|GPIO_PULLUP);
- bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT|GPIO_PULLUP);
- bflb_uart_init(uart1, &cfg);
- bflb_uart_txint_mask(uart1, false);
- bflb_uart_rxint_mask(uart1, false);
- bflb_irq_attach(uart1->irq_num, uart_isr, NULL);
- bflb_irq_enable(uart1->irq_num);
- while(1)
- {
- }
- }
复制代码 参考文章:
|