LPC1768串口使用
Lpc1768内置了四个串口通讯模块,都是异步通讯模块,其中,串口0/2/3是普通串口通讯,串口1与 UART0/2/3 基本相同,只是增加了一个 Modem 接口和 RS-486/EIA-486 模
式,不支持
IrDA,我们今天以串口0来演示串口的使用.
首先,使用串口0要打开串口0的时钟
然后要配置相应的输入输出IO口为串口通讯功能
然后,要控制串口0的时钟源,1768的大部分外设时钟都可以选择从cpu时钟中进行分频
接着,需要设置串口的通讯位,停止位以及波特率等
通过该寄存器能够设置波特率
通过该寄存器可以设置通讯模式
记住,初始化完成之后需要将除数锁存变为0,使其他人不能随意修改波特率,接着对串口的fifo进行控制
使能相应的中断
然后在系统中使能相应中断通道,串口就可以用了.
在串口中断处理程序中,先清除通道中断挂起,然后清除串口相应挂起,取出数据,就可以了,详细的代码示例如下
void DebugSerialInit(u32 baud)
{
LPC_SC->PCONP |= (1<<3); //打开UART0功率、时钟控制位
LPC_PINCON->PINSEL0 &= ~(0x03<<4);
LPC_PINCON->PINSEL0 |= (0x01<<4); //p02 tx0
LPC_PINCON->PINSEL0 &= ~(0x03<<6);
LPC_PINCON->PINSEL0 |= (0x01<<6); //p03 rx0
LPC_UART0->LCR = 0x83; //设置串口数据格式,8位字符长度,1个停止位,无校验,
//使能访问除数锁存器 ,设定波特率
LPC_SC->PCLKSEL0 &= ~(0x03<<6); //uart0 pclk =
sysclock
LPC_SC->PCLKSEL0 |= (0x01<<6); //uart0 pclk =
sysclock
LPC_UART0->DLM = ((SystemCoreClock/16)/baud) / 256; //除数高八位 , 没有小数情况
LPC_UART0->DLL = ((SystemCoreClock/16)/baud) % 256; //除数第八位
LPC_UART0->LCR = 0x03; //禁止访问除数锁存器,锁定波特率
LPC_UART0->FCR = 0x00; //禁止FIFO
NVIC_ClearPendingIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn,NVIC_EncodePriority(SYS_NVIC_GROUP,UART0_PreemptPriority,UART0_SubPriority));
NVIC_EnableIRQ(UART0_IRQn); /* enable irq in
nvic */
LPC_UART0->IER = 0x01; //使能接收中断
}
串口中断处理程序如下
void UART0_IRQHandler(void)
{
u8 Res;
NVIC_ClearPendingIRQ(UART0_IRQn);
Res = LPC_UART0->RBR; //读取接收数据,读取中断自动清零
DebugSerialSendChar(Res);
}
注意一点,在不使用小数寄存器的情况下,115200的的波特率,串口的外设时钟最好在100M,否则串口的波特率的误差比较大,容易造成通讯失败
LPC1768串口使用的更多相关文章
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言
目 录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在 ...
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
目 录 第十二章 二次开发及应用... 2 12.1 项目配制... 3 12.2 引用相关组件... 4 12.3 构建主程序... 5 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 8.总体控制器的设计
目 录 第八章 总体控制器的设计... 2 8.1 总控制器的职能... 2 8.2 组装和释放部件... 3 8.3 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计
目 录 第六章 通讯控制器的设计... 2 6.1 控制器接口... 2 6.2 串口控制器... 3 6.3 ...
- Linux下的串口编程及非阻塞模式
本篇介绍了如何在linux系统下向串口发送数据.包括read的阻塞和非阻塞.以及select方法. 打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include < ...
- 使用Minicom基于串口调试HiKey
虽然通过adb shell调试方便,但是有些时候不得不借助于串口进行调试,比如测试suspend to ram之类的功能时,adb服务被关闭. 同时在minicom中也可以进入shell,进行操作. ...
- UP Board 串口使用心得
前言 原创文章,转载引用务必注明链接. 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我的博客: http://www.cnblogs.com/sjqlwy/p/up_s ...
随机推荐
- js管理内存
数据不再有用时,最好通过将其值置NULL来释放其引用-这个做法叫做解除引用(dereference).这个做法适用于全局变法和全局对象的属性. function createPerson(name){ ...
- 3d 人物残像
前言: gameunity 框架 还在继续完善中,0.2版本将会是一次 重大的里程碑. 正文: 哈哈,大家一定流汗了吧.请原谅我为自己代言. 好了,今天我要讲的是 3d人物残像. 首先我来说下 目前 ...
- instanceof实例和prototype
var arr=[1,3,2];alert(arr instanceof Array); 返回true: 对于继承譬如一个Drag()拖拽的继承,我想加一个限制范围的拖拽 我需要写一个新的函数 fun ...
- Linux学习 -- 备份与恢复
备份 Linux系统需要备份的数据 /root/ /home/ /var/spool/mail /etc/ others 备份策略 完全备份 增量备份 差异备份 备份和恢复命令 dump resto ...
- 正确使用String,StringBuffer,StringBuilder
很多时候在实际中,我们很常用的就是字符串String. 对于它,网上已经说的很多了. 我就说一点是特别重要的需要记住的,String赋值之后它就是不能被改变的. 也就是这一点,导致了String在操作 ...
- h5移动端设计页面
@京东设计中心 :去年JDC出了不少优秀的武媚娘…不,H5呢,大家都很拼,同时当然也积累了一些经验和教训,今天结合咱们的实战案例,从字体,排版,动效,音效,适配性,想法这几个方面好好聊一聊关于H5的设 ...
- linux创建vg、lv
LVM磁盘管理 一.LVM简介... 1 二. LVM基本术语... 2 三. 安装LVM... 3 四. 创建和管理LVM... 4 2. 创建PV.. 6 3. 创建VG.. 7 4. 创建LV. ...
- docker rmi all
docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
- Delphi MaskEdit用法(转)
源:http://www.cnblogs.com/zhangzhifeng/archive/2011/10/12/2208640.html MaskEdit是用来建立编辑框的,但它与Edit编辑框可以 ...
- merge_partition
set echo on time on timing on spool 01_merge_partition.log @/testdb/change/env/env_test.sql connect ...