找回密码
 立即注册

微信扫码登录

查看: 264|回复: 4

使用UART, RX无法接受数据

[复制链接]

10

主题

19

回帖

118

积分

荣耀黄金

积分
118
发表于 2024-12-25 11:45:34 | 显示全部楼层 |阅读模式
information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: 8258
SDK及版本:
使用UART, 电脑串口输出0x01, 芯片RX接受数据,无法点亮LED, 不知道程序有什么问题?

void rx_cb(void)
{
        uart_rxData_t *rxData = (uart_rxData_t *)rx_data_buf;
        T_uartPktRecvSeqNo = rxData->dataPayload[0];

        if(T_uartPktRecvSeqNo == 1)
        {
             drv_gpio_write(LED_R, 1);
        }
}


初始化:
    UART_PIN_CFG();
    drv_uart_init(9600, rx_data_buf, sizeof(rx_data_buf)/sizeof(u8), rx_cb);
    drv_enable_irq();

12

主题

44

回帖

258

积分

华贵铂金

积分
258
发表于 2024-12-25 13:31:41 | 显示全部楼层
What is your definition/size of rx_data_buf?
Did you receive any data? What is rxData->dataLen?

10

主题

19

回帖

118

积分

荣耀黄金

积分
118
 楼主| 发表于 2024-12-25 14:12:55 | 显示全部楼层
u8 rx_data_buf[10];

void rx_cb(void)
{
            if(rx_data_buf[0] == 1)
                {
               drv_gpio_write(LED_R, 1);
                }
}

\初始化:
    UART_PIN_CFG();
    drv_uart_init(9600, rx_data_buf, sizeof(rx_data_buf)/sizeof(u8), rx_cb);
    drv_enable_irq();

I modified it like this, but still can't turn on the LED

12

主题

44

回帖

258

积分

华贵铂金

积分
258
发表于 2024-12-25 14:29:36 | 显示全部楼层
fff 发表于 2024-12-25 14:12
u8 rx_data_buf[10];

void rx_cb(void)

This is the code i have been using for a while.
Note, that there is a minimum rx_data_buf[] size. If you set it too low it is not going to work.
  1. typedef struct{
  2.         u32 dataLen;
  3.         u8 data[5];
  4. }uart_rxData1_t;

  5. #define UART_TX_BUF_SIZE    16
  6. #define UART_RX_BUF_SIZE    16
  7. __attribute__((aligned(4))) u8 uartTxBuf1[UART_TX_BUF_SIZE] = {0};
  8. __attribute__((aligned(4))) u8 uartRxBuf1[UART_RX_BUF_SIZE] = {0};


  9. void uart_data_handler1(void *arg){
  10.         // the format of the uart rx data: length(4 Bytes) + payload
  11.         u8 st = SUCCESS;
  12.         uart_rxData1_t *rxData = (uart_rxData1_t *)uartRxBuf1;
  13.         if(rxData->dataLen == 0){
  14.                 st = 0xE4;        //ZBHCI_MSG_STATUS_UART_EXCEPT;
  15.         }
  16.         else if(rxData->dataLen > 4){        // > (UART_RX_BUF_SIZE - 4)){
  17.                 st = 0xE1;        //ZBHCI_MSG_STATUS_MSG_OVERFLOW;
  18.         }
  19.         if(st == SUCCESS){
  20.                         u8 data = rxData->data[0] ;

  21.         }
  22. }

  23. void uartRcvHandler1(void){
  24.         TL_SCHEDULE_TASK(uart_data_handler1, uartRxBuf1);
  25. }

  26. voi
  27. void uartinit(void){
  28.         UART_PIN_CFG();
  29.         drv_uart_init(56000, uartRxBuf1, UART_RX_BUF_SIZE, uartRcvHandler1);
  30. }
复制代码

Set the baud rate to whatever you are using

10

主题

19

回帖

118

积分

荣耀黄金

积分
118
 楼主| 发表于 2024-12-25 15:15:47 | 显示全部楼层
thanks wes58!  just test your code , works well.


typedef struct{
        u32 dataLen;
        u8 data[5];
}uart_rxData1_t;

#define UART_TX_BUF_SIZE    16
#define UART_RX_BUF_SIZE    16
__attribute__((aligned(4))) u8 uartTxBuf1[UART_TX_BUF_SIZE] = {0};
__attribute__((aligned(4))) u8 uartRxBuf1[UART_RX_BUF_SIZE] = {0};


void uart_data_handler1(void *arg){
        // the format of the uart rx data: length(4 Bytes) + payload
        u8 st = SUCCESS;
        uart_rxData1_t *rxData = (uart_rxData1_t *)uartRxBuf1;
        if(rxData->dataLen == 0){
                st = 0xE4;        //ZBHCI_MSG_STATUS_UART_EXCEPT;
        }
        else if(rxData->dataLen > 4){        // > (UART_RX_BUF_SIZE - 4)){
                st = 0xE1;        //ZBHCI_MSG_STATUS_MSG_OVERFLOW;
        }
        if(st == SUCCESS)
        {
            u8 data = rxData->data[0] ;

            if(rxData->data[0] == 1 && rxData->data[1] == 2)
            {
                   drv_gpio_write(LED_R, 1);
            }
            else if(rxData->data[0] == 2 && rxData->data[1] == 3)
            {
                      drv_gpio_write(LED_R, 0);
            }
        }
}

void uartRcvHandler1(void){
        TL_SCHEDULE_TASK(uart_data_handler1, uartRxBuf1);
}


UART_PIN_CFG();
drv_uart_init(9600, uartRxBuf1, UART_RX_BUF_SIZE, uartRcvHandler1);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telink forum ( 沪ICP备17008231号-1 )

GMT+8, 2025-2-5 17:44 , Processed in 0.084838 second(s), 20 queries .

Powered by Telink 隐私政策

泰凌微电子版权所有 © 。保留所有权利。 2024

快速回复 返回顶部 返回列表