首页->【玩CortexM0】

8 0

实验十 LPC824改变串口速率实验

曾有网友说,LPC824无法改变串口速率,本实验就讨论和实现此问题。

计算机上采用网友温子琪先生编的免费提供给网友们用的模拟串口程序,在此表示感谢。

此文的目的是为了帮助网友们更好的理解mbed的方便和LPC824的易配置和使用。

曾经在网上求助过,LPC824的内存不够了——原因是在设置UART口时发生的,当时的想法是想改变UART的波特率——因为LPC的mbed默认的速率为9600,在这么低的串口速率下,主循环程序受此牵连很大,因此必须改变,至少115200吧。

但是,尽管在LPC824程序中看不到UART的设置,在P0_7是可以获得printf的信息显示在PC机的模拟串口上!并且在P0_18口可以由PC机输出讯息到LPC824,说明默认LPC824 UART已经内设置,于是开始以下步骤查找设置的可能地方:

首先搜全项目中的关键字:9600,一通下来仅仅在注释中有——不成功!

其次搜baud,只有一个函数,但无法设定!

再其次查看与UART有关的.h文件——这是MBED最棒的地方——只有.h文档,结果没有UART只有SPI和Serial与其相关的.h文档,其中的Serial.h可以设置UART,但按照文档案例设置立马产生内存不够的错误提示无法编译——32K不够用的!

经过前几次碰钉子,分析结果,意外的在搜Serial时发现了另一个UART设置程序:RawSerial.h

查看此函数也可以设置UART,并且有着与Serial.h相似[相同]的案例。于是乎就进行如下配置实验[初始希望两个口挨着,并且暂时没有使用的GPIO口——P0_16,17],作为定义对象,在对象类定义区定义:

RawSerial prtOut(P0_16,P0_17);//TX,RX

P0_16为TX输出,P0_17为RX输入。

在ioInit函数中设置定义波特率:

prtOut.baud(115200);

编译后下载,发生了有趣的事件:首先程序没有报错——存储不够的报警!其次在原来的GPIO口的P0_7,P0_18没有了响应,尝试用P0_16-->模拟串口的RX,P0_17-->模拟串口的TX上,打开PC的模拟串口软件,将波特率设置到115200,熟悉的结果出现在窗口中。

一鼓作气波特率设置为194000、256000[此速率需要另外一款可以支持到256000的软件],一切Ok!结果见图A1,此为194000bps照片。A1-194000串口接收.jpg

细看RawSerial.h,里面有1个字节的getc()和putc()的函数——可以理解是单字节获得和输出函数,给我在此单片机上处理二手老式GPS信号成为可能。

此实验再留一个问题:想增加设置2路ADC,用P0_21,P0_22,并将它们显示在3[控制为2]行上,这样可以测试手中老式的模拟出口的3轴加速度计,并且多一路测试其它模拟量的采样。此结果见照片A2。A2-4路ADC 2路PWM 3路测脉冲 1路计数器.JPG


楼主可见