在线时间1020 小时
UID299704
注册时间2011-6-18
NXP金币2187
TA的每日心情 | 开心 2024-4-10 22:38 |
---|
签到天数: 1335 天 [LV.10]以坛为家III
版主
- 积分
- 9049
- 最后登录
- 2024-4-13
|
本帖最后由 jobszheng5 于 2019-2-22 10:06 编辑
[LPC1768]串口驱动的编写
串口这个神奇的外围接口就是今天实验的主角。根据原理图与硬件设备,开发板的uart0设计为了DB9母口,因此,我们使用USR转RS232线直接与其通讯,作为我们与开发板交互的调试接口。
本次实验并未采取官方的库文件,也没有使用其它官方的设计模板,而是自行查阅的配置寄存器,并直接操作寄存器。目的有二:一来,从设计上面了解LPC1768都能干什么?二来,寄存器的设计方式可以加速处理速度,节省项目flash资源。
具体的配置流程请大家参考官方手册即可,硬件的寄存器配置的流程没有好说的,按设计要求执行即可。
这里提示大家,DLL寄存器与TRH寄存器是同一个地址,其读取入口的控制是由DLAB寄存器的bit7控制,所以大家在通过在线调试工具查看寄存器时要特别注意。
另外,在网上搜索uart0配置资源时发现,多数示例都是舍弃了小数发生器。这个对于波特率的影响还是挺大的,我这里还是建议大家多看一下手册,配置了小数发生器的寄存器值。
还有一部分程序代码,在配置波特率时使用了计算的方式。其实这个多少些教条了。在工业领域里面,串口的波特率几乎都是选定值,只有几个值,做一个列表即可。完全没有必要再实现一个计算程序。分享一下我的主频100MHz,串口外设时钟4分频下的不同波特率的配置参数:
- typedef struct _tBandPara
- {
- uint8_t dlmVal;
- uint8_t dllVal;
- uint8_t fdrVal;
- }tBandPara;
- const tBandPara bandData[2] = {
- {0, 8, 0xD9}, /* band=115200bps */
- {0, 162, 0x10}, /* band=9600bps */
- };
复制代码
这样计算出来的uart0波特率的偏差仅有0.2%,在长距离通讯上面的通讯质量就会显现出来。最后看一下结果:
TO BE CONTINUED.
|
|