cc2530-Contiki系统的串口输入问题

来源:互联网 发布:inventor软件多少钱 编辑:程序博客网 时间:2024/06/05 18:52

在工作中接触到了cc2530,并在上面使用contiki系统。以下是使用串口时遇到的坑。


第一个坑。


首先我尝试在contiki做一个串口回显例程。串口打印输出可以使用printf函数,可串口输入不能使用scanf函数,我查看源代码了好久,才发现只需要在contiki-conf.h中修改一下配置即可使用串口输入功能。

在contiki-conf.h文件中找到如下代码

/* * USARTs: *   SmartRF RS232 -> USART0 / Alternative 1 (UART) *   SmartRF LCD   -> USART1 / Alternative 2 (SPI) */#define UART_ON_USART     0#define UART1_CONF_ENABLE 0#ifndef UART0_CONF_ENABLE#define UART0_CONF_ENABLE  1#endif#ifndef UART0_CONF_WITH_INPUT#define UART0_CONF_WITH_INPUT 1#endif#ifndef UART0_CONF_HIGH_SPEED#define UART0_CONF_HIGH_SPEED 0#endif

把UART0_CONF_WITH_INPUT置1即开启了串口输入。




第二个坑。


串口输入功能开启了,现在测试一下串口回显,我输入1234567890给cc2530,返回的却是134690,有时候还是1346790。

很奇怪,数字2、5、8都没有回显。


经过仔细排查,我查到了UART0中断函数那里,代码如下:

  #if UART0_CONF_WITH_INPUT    #ifdef SDCC    void    uart0_rx_isr(void) __interrupt (URX0_VECTOR)  #else    #pragma vector=URX0_VECTOR    __near_func __interrupt void uart0_rx_isr(void)  #endif  {    ENERGEST_ON(ENERGEST_TYPE_IRQ);    leds_toggle(LEDS_YELLOW);    URX0IF = 0;    if(uart0_input_handler != NULL) {      uart0_input_handler(U0DBUF);    }    ENERGEST_OFF(ENERGEST_TYPE_IRQ);  }  #endif

代码中有宏定义不好阅读,我整理了一下,最后是这样的:

    void    uart0_rx_isr(void) __interrupt (URX0_VECTOR)  {    ENERGEST_ON(ENERGEST_TYPE_IRQ);    leds_toggle(LEDS_YELLOW);    URX0IF = 0;    if(uart0_input_handler != NULL) {      uart0_input_handler(U0DBUF);    }    ENERGEST_OFF(ENERGEST_TYPE_IRQ);  }

由于之前有使用DHT11读取数据时,第一次读正常第二次读错误的经验(引脚问题),所以这里我很快判断是leds_toggle(LEDS_YELLOW);这条语句影响到了串口回显。注释掉时候,我发送1234567890,回显也显示1234567890了。


以上是使用contiki串口遇到的坑。

0 0
原创粉丝点击