|
本帖最后由 hello_kity 于 2016-5-25 17:20 编辑
调试UART进行了很多天,今天终于能够发送了,期间遇到了几个问题,在这里与大家分享一下。
1、配置的问题
采用sdk1.0.0的库时,fsl_uart_driver.c里包含了信号量操作的函数,如果不打算移植操作系统,这些是多余的。这里采用一个宏处理,即:不采用操作系统时,不进行信号量的相关操作;
fsl_uart_driver.c 初始化函数是uart_status_t UART_DRV_Init(uint32_t instance, uart_state_t * uartStatePtr, const uart_user_config_t * uartUserConfig),这里的uartStatePtr用于记录UART
的状态,其中就包含信号量。此函数对uart模块进行初始化时,存在2个问题:a、没有使能PORTn,因此一些复用功能的引脚不能使用;b、没有配置复用功能;本人还没有学习移植操作系统(freeRtos),因此不知道demo里freeRTOS是怎么处理的。本人发现这个问题后,直接修改uart初始化函数(新手的处理方法)。
2、参考文档的错误
本人参考了《MAPS-K64 HW Users Guide.pdf》文档,但是发现此文档关于CN3/CN1及jp5的说明有错误,此文档给出UART1的发送、接收引脚分别是ptc14和ptc15,但是查阅《K64P144M120SF5RM.pdf》,此两脚为UART4的发送及接收。
3、发送
发送一帧数据时,会出现接收到的数据不完整,查阅发送函数UART_HAL_Putchar(uint32_t baseAddr, uint8_t data)发现,发送时没有检查发送寄存器的状态,源代码如下: HW_UART_S1_RD(baseAddr);//并没有检测状态寄存器
HW_UART_D_WR(baseAddr, data);//直接发送
修改如下:
while(!(HW_UART_S1_RD(baseAddr) & 0x40));
HW_UART_D_WR(baseAddr, data);
至此,发送数据成功,发送内容“hello world”
|
|