查看: 1379|回复: 0

[原创] [LPC1768]串口驱动的编写

[复制链接]
  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2019-2-22 10:04:36 | 显示全部楼层 |阅读模式
    本帖最后由 jobszheng5 于 2019-2-22 10:06 编辑

    [LPC1768]串口驱动的编写
        串口这个神奇的外围接口就是今天实验的主角。根据原理图与硬件设备,开发板的uart0设计为了DB9母口,因此,我们使用USR转RS232线直接与其通讯,作为我们与开发板交互的调试接口。
        本次实验并未采取官方的库文件,也没有使用其它官方的设计模板,而是自行查阅的配置寄存器,并直接操作寄存器。目的有二:一来,从设计上面了解LPC1768都能干什么?二来,寄存器的设计方式可以加速处理速度,节省项目flash资源。
        具体的配置流程请大家参考官方手册即可,硬件的寄存器配置的流程没有好说的,按设计要求执行即可。
        这里提示大家,DLL寄存器与TRH寄存器是同一个地址,其读取入口的控制是由DLAB寄存器的bit7控制,所以大家在通过在线调试工具查看寄存器时要特别注意。
        另外,在网上搜索uart0配置资源时发现,多数示例都是舍弃了小数发生器。这个对于波特率的影响还是挺大的,我这里还是建议大家多看一下手册,配置了小数发生器的寄存器值。
        还有一部分程序代码,在配置波特率时使用了计算的方式。其实这个多少些教条了。在工业领域里面,串口的波特率几乎都是选定值,只有几个值,做一个列表即可。完全没有必要再实现一个计算程序。分享一下我的主频100MHz,串口外设时钟4分频下的不同波特率的配置参数:
    1. typedef struct _tBandPara
    2. {
    3.   uint8_t dlmVal;
    4.   uint8_t dllVal;
    5.   uint8_t fdrVal;
    6. }tBandPara;

    7. const tBandPara bandData[2] = {
    8.   {0, 8, 0xD9},  /* band=115200bps */
    9.   {0, 162, 0x10},  /* band=9600bps */
    10. };
    复制代码

       这样计算出来的uart0波特率的偏差仅有0.2%,在长距离通讯上面的通讯质量就会显现出来。最后看一下结果:
    串口打印.jpg
        TO BE CONTINUED.





    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 17:10 , Processed in 0.098633 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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