查看: 2319|回复: 1

MAPS四色板开发平台-UART

[复制链接] qrcode

22

主题

24

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2016-5-25 05:18 PM | 显示全部楼层 |阅读模式
本帖最后由 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”
回复

使用道具 举报

0

主题

87

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2016-5-25 05:50 PM | 显示全部楼层
过来学习的,写的很不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表