微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2538 UART0的初始化和发送代码

CC2538 UART0的初始化和发送代码

时间:10-02 整理:3721RD 点击:

各位大神们好。

经过了一番挣扎,我终于让CC2538的Uart0打印出东西了。

现在将代码上传,欢迎大家下载测试。

请将测试结果及时跟贴回复,以便我修改代码

请一定要仔细阅读代码中的注释!

8117.Uart0Util.h

4263.Uart0Util.c

提供的代码不错;

1、参考HalUARTInitIsr函数,详细阅读注释应该会简单些。

2、TI的万能引脚功能映射,看似完美方案,假如硬件设计错了,可以重新映射接口,照样能用,我就这么干过,^_^。

3、万能引脚映射,但也造成很多人困惑,以为像别的MCU或者MPU,某个引脚固定几个功能,然后分时复用,使用前设定好模式即可,CC2538还要额外设置引脚和功能映射。

4、注释一下:

  //映射UART1的TXD引脚,你可以改为UART0,参数二改为IOC_MUX_OUT_SEL_UART0_TXD
  IOCPinConfigPeriphOutput(GPIO_A_BASE, GPIO_PIN_1, IOC_MUX_OUT_SEL_UART1_TXD);
  //映射UART1的RXD引脚,可以改为UART0,参数二为IOC_UARTRXD_UART0
  IOCPinConfigPeriphInput(GPIO_A_BASE, GPIO_PIN_0, IOC_UARTRXD_UART1);
  //接下来这两句是映射具体的端口的,这里是PA0和PA1,你可以改为PB1和PB2也是可以的,相信知道base+offset这种寻址方式的人都了解
  GPIOPinTypeUARTInput(GPIO_A_BASE, GPIO_PIN_0);
  GPIOPinTypeUARTOutput(GPIO_A_BASE, GPIO_PIN_1);  

当然还有几个地方要注意:

1、搜搜HAL_UART_PORT宏

2、搜搜HAL_UART_SYS_CTRL宏

不好意思,没仔细看你代码,不过看到里面有static的东西,在这种捉襟见肘的MCU上,最好还是能省则省,不要用全局的,恨死XDATA报错了

感谢您的回复。

关于全局变量,代码中只是用了一个全局变量。

之所以用static修饰,是为了限定该变量只在该文件内使用。

ZStack中的uart api有个陷阱

uint8 HalUARTOpenIsr(uint8 port, halUARTCfg_t *config)这个函数用来打开uart,port参数指定是哪个uart

但是这个函数最后调用了UARTEnable(HAL_UART_PORT);

HAL_UART_PORT是一个宏,打开的是UART1。

我发现这个uart api就是给MT定制的,不是给开发者调用的。

对了,请教您一个问题,我的uart打印用的UARTCharPut这个函数

我看uart api里面用的UARTCharPutNonBlocking

我用UARTCharPutNonBlocking发现只打印17个字符就结束了,换成UARTCharPut这个函数就正常了

使用UARTCharPut这个函数会有什么问题吗?

我看这两个函数都没有提供原始代码,所以没办法仔细分析。

1、HalUARTOpenIsr看似指定了port,但是实际上这个参数并没有使用,TI应该是根据具体的UARTEnable来决定使用哪路串口,当然两路串口应该是可以同时工作的,不过一路是DMA,一路是ISR

2、UARTCharPutNonBlocking和UARTCharPut的区别,应该是一个非阻塞,一个阻塞,可能针对不同的应用场景的,非阻塞用于单次小数据量,直接放到缓缓区不需要等发送完成就返回,阻塞,就是等数据全部发完了再返回。

3、如果都提供了代码,这帮FAE就闲着没事干了都得辞掉,这是非技术因素

我已经实现了两路UART串口同时使用,比你的方便很多,链接如下,希望能够帮助更多的人:

CC2538 ZigBee 芯片 两路UART串口同时使用

吐槽一句,TI论坛跟帖不让发超链接,直接把超链接符号弄成灰色,太扯淡了,还得让我用html文本编辑才能添加超链接!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top