|
查看: 3284|回复: 4

使用UART, RX无法接受数据

[复制链接]

19

主题

40

回帖

233

积分

华贵铂金

积分
233
发表于 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();

19

主题

102

回帖

538

积分

超凡大师

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

19

主题

40

回帖

233

积分

华贵铂金

积分
233
 楼主| 发表于 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

19

主题

102

回帖

538

积分

超凡大师

积分
538
发表于 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

19

主题

40

回帖

233

积分

华贵铂金

积分
233
 楼主| 发表于 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

相关侵权、举报、投诉及建议等,请发 E-mail:forum@telink-semi.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|沪ICP备17008231号-1 |沪公网安备31011502403548号

在本版发帖返回顶部