查看: 10350|回复: 5

[原创] [TRK-KEA128]KEA128 PWT脉冲宽度捕捉--自动串口波特率

[复制链接]
  • TA的每日心情

    2016-10-20 09:45
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    80

    主题

    1038

    帖子

    5

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2223
    最后登录
    2023-11-20
    发表于 2016-1-12 20:13:34 | 显示全部楼层 |阅读模式
    本帖最后由 花溪村长 于 2016-1-12 20:24 编辑

    KEA系列具有一个脉宽定时器,能够捕获脉冲宽度!具体参考NXP的参考手册
    下面进入正题!
    下位机的波特率自适应原理:
    主机发送固定的字符,这里我们发送字符0,然后从机捕获RX引脚上的低电平宽度,然后计算出上位机的波特率!

    1、设置开发板上UART2的RX引脚和PWTINT3相连接


    2、设置PWT_R1寄存器,PWT总共具有两个寄存器,R1寄存器包括通用寄存器设置、状态未以及正脉冲宽度值,R2寄存器是16位只有计数器值和负脉冲宽度的值

    R1寄存器


    设置PWT的频率!
    1)SIM模块要开启PWT时钟,


    2)R1中设置时钟
    PCLKS选择总线时钟

    选择分频数,这里我选择地是2分频

    3)设置捕获的工作模式
    设置EDGE 4种模式 这里本次选择的第3种,下降沿触发,上升沿更新寄存器


    4)使能PWT通道 -UART2RX和INT3链接 所以这里使能通道3


    5)使能中断 模块使能

    3 中断
    中断中通过检测R1寄存器的PWTRDY和PWTOV来判断是数据有效中断还是定时器溢出中断,如果数据有效中断读取R2中的低电平值

    R2寄存器中低电平有效值


    PWT初始化代码
    1. void PWT_Init(void)
    2. {
    3.         SIM_SCGC |=  SIM_SCGC_PWT_MASK;
    4.         SIM_SOPT1 |= SIM_SOPT1_UARTPWTS(2) ; //UART2 RX链接到PWT3上
    5.         PWT_R1 |= PWT_R1_PINSEL(3);  //使能PWT3                             
    6.         PWT_R1|=PWT_R1_PRE(1);       //BUS 2分频   
    7.         PWT_R1|=PWT_R1_EDGE(2);  //下降沿开始上升沿结束
    8.         
    9.         PWT_R1|=PWT_R1_POVIE_MASK;            
    10.         PWT_R1|=PWT_R1_PRDYIE_MASK;            
    11.         PWT_R1|=PWT_R1_PWTIE_MASK;  
    12.         SIM_SCGC |= SIM_SCGC_UART2_MASK;    //使能UART2
    13.         UART2->C2 |= UART_Mode_Rx ;         //使能RX
    14.     PWT_R1|=PWT_R1_PWTEN_MASK;          //使能
    15.         NVIC_Init(PWT_IRQn,0);   
    16. }
    复制代码


    最后测试验证
    程序运行时,通过串口发送字符0来更改波特率;这里只是为了学习PWT而已,所以每次启动时只能更改一次,下一次更改需要Reset,可以自适应9600~256000,只验证过这些!再往下不能用了!没深入研究!


    Keil工程:
    点击下载KEA128工程

    评分

    参与人数 1NXP金币 +20 收起 理由
    小七 + 20 很给力!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13135
    最后登录
    2019-1-27
    发表于 2016-1-18 16:38:59 | 显示全部楼层
    点赞!点赞!
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    18

    帖子

    0

    注册会员

    Rank: 2

    积分
    150
    最后登录
    2022-7-5
    发表于 2016-5-23 11:27:26 | 显示全部楼层
    楼主,您好!
    请问这个PWT模块能用作PWM的占空比的测量用吗?
    FTM2有脉宽测量功能,但是已经被我用作PWM输出了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    18

    帖子

    0

    注册会员

    Rank: 2

    积分
    150
    最后登录
    2022-7-5
    发表于 2016-5-23 11:27:51 | 显示全部楼层
    楼主,您好!
    请问这个PWT模块能用作PWM的占空比的测量用吗?
    FTM2有脉宽测量功能,但是已经被我用作PWM输出了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2016-5-31 09:25:11 | 显示全部楼层
    谢谢楼主的分享
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    31
    最后登录
    2021-9-7
    发表于 2021-8-28 17:27:24 | 显示全部楼层
    请教一下,((1.0/(negative_pulse*0.01))*10e5),为什么乘以0.01?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-25 11:06 , Processed in 0.098327 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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