各位大神们好。
经过了一番挣扎,我终于让CC2538的Uart0打印出东西了。
现在将代码上传,欢迎大家下载测试。
请将测试结果及时跟贴回复,以便我修改代码
请一定要仔细阅读代码中的注释!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位大神们好。
经过了一番挣扎,我终于让CC2538的Uart0打印出东西了。
现在将代码上传,欢迎大家下载测试。
请将测试结果及时跟贴回复,以便我修改代码
请一定要仔细阅读代码中的注释!
提供的代码不错;
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);
感谢您的回复。
关于全局变量,代码中只是用了一个全局变量。
之所以用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就闲着没事干了都得辞掉,这是非技术因素