EFM32 LG232系列单片机干货之LEUART
本篇文章,我们来看EFM32单片机的LEUART串口。LEUART串口是EFM32系列单片最特色的功能之一。这个LEUART的时钟源可以在主时钟与实时时钟以及内部的RX时钟三者间选择。如果选择了主时钟,那LEUART就和普通的UART串口没区别,速度不受限制同时也没有低功耗特性。如果选择了外部的32.768k实时时钟。那LEUART就可以在EM2模式下使用。但这时LEUART只能使用9600及以下的波特率。EM2模式下,单片机的绝大部分外设都已关闭,MCU本身也进入了睡眠状态。这时MCU的耗电可以到nA级别。在EM2模式下使用LEUART有两种方式,一种是与DMA配合,不通过MCU的干预自动完成收发动作。MCU通过实时时钟定时器来定期唤醒再来处理收到的内容。第二种方式是LEUART发生接收事件,并同时唤醒MCU,由MCU马上对串口进行操作处理。处理完毕后MCU重新回到睡眠状态。这里我们看第二种方式下的LEUART的初始化代码:
void setupLeuart(void)
{
/* Enable peripheral clocks */
CMU_ClockEnable(cmuClock_HFPER, true);
/* Configure GPIO pins */
CMU_ClockEnable(cmuClock_GPIO, true);
/* Enable CORE LE clock in order to access LE modules */
CMU_ClockEnable(cmuClock_CORELE, true);
/* Select LFXO for LEUARTs (and wait for it to stabilize) */
//CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_CORELEDIV2);
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO);
CMU_ClockEnable(cmuClock_LEUART0, true);
LEUART_Init_TypeDef init = LEUART_INIT_DEFAULT;
/* Configure LEUART */
init.enable = leuartDisable;
init.baudrate=9600;
LEUART_Reset(LEUART0);
/* Enable pins at default location */
LEUART0->ROUTE = LEUART_ROUTE_RXPEN | LEUART_ROUTE_TXPEN | LEUART_ROUTE_LOCATION_LOC2;
LEUART_Init(LEUART0, &init);
/* To avoid false start, configure output as high */
GPIO_PinModeSet(gpioPortE,14, gpioModePushPullDrive, 1);
GPIO_PinModeSet(gpioPortE,3, gpioModePushPullDrive, 1);
//NVIC_SetPriority(LINK_UART_IRQ,7);
/* Enable LEUART1 interrupt vector */
NVIC_ClearPendingIRQ(LINK_UART_IRQ);
NVIC_EnableIRQ(LINK_UART_IRQ);
LEUART0->IEN=LEUART_IEN_RXDATAV;
/* Finally enable it */
LEUART_Enable(LEUART0, leuartEnable);
}
代码中加粗的部分都是可以替换更改的,根据你选的MCU型号及所配置的资源来进行设置,不过基本上只需要改末尾数字就好了。配置代码完成后在主程序之后附上中断处理函数:
void LEUART0_IRQHandler(void)
{
//EMU_EnterEM2(false);
static uint8_t data;
__IO uint32_t leuartif;
leuartif = LEUART_IntGet(LEUART0);
LEUART_IntClear(LEUART0, leuartif);
//BlueFlag=true;
if (leuartif & LEUART_IF_RXDATAV)
{
data = LEUART0->RXDATA;
//LEUART_Tx(LEUART0,data);
//USART_Tx(USART1,data);
BlueReciveFlag=true;
BlueBuffer[BlueCounter]=data;
BlueCounter++;
TIMER_Enable(TIMER0,true);
}
}
以上代码实际使用过,所以里面有些对大家无用的代码可以略过。重点是:中断程序名不能随便改;
在main主程序中主while循环开始前运行LEUART配置代码。之后,可以使用如下库函数来发送字符:
void LEUART_Tx (LEUART_TypeDef * leuart,uint8_t data )
比如:LEUART_Tx(LEUART0,0x41)就可以通过LEUART0发送字符‘A’
EFM32库函数参考网址:http://devtools.silabs.com/dl/documentation/doxygen/5.6/efm32g/html/index.html
EFM32 LG232系列单片机干货之LEUART相关推荐
- stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...
本期,Lucy制作了九个案例分享给大家,分别为:流水灯.按键LED.数码管.点阵.定时蜂鸣器.NTC温度计.超声波测距仪.光敏RGB灯.氛围灯(红外) Lucy无偿提供全部案例的原理图和部分案例的代码 ...
- 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
2.2 数码时间显示电路 七段LED数码管是由八个发光二极管构成,通过给其引脚不同的高低电平,从而显出0~9的数字和小数点,本文通过四个一位数码管并联通过P3口当中的P3.0与P3.1与STATIC ...
- 8051系列单片机汇编语言指令速查表(汇编语言的111条指
8051系列单片机汇编语言指令速查表(汇编语言的111条指_纳兰容若的左手_新浪博客 http://blog.sina.com.cn/s/blog_6486c0b30100gqew.html 编号 指 ...
- 51单片机除c语言 中断嵌套,关于51系列单片机中断嵌套 - 关于单片机中断嵌套总结...
关于51系列单片机中断嵌套 说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套.现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了. 在说到 ...
- pic单片机内部时钟校准c语言,PIC系列单片机片内定时器实时时钟的实现(转)
PIC系列单片机片内定时器实时时钟的实现(转) (2008-08-11 14:24:59) 标签: 杂谈 1. 1 振荡频率的考虑 工作频率为4MHz 的单片机, 选择32. 768kHz 的晶振显然 ...
- stm32f1系列单片机实战应用
最近有一个小项目,测量运动自行车速度,上传给上位机软件,处理VR视频播放.正好公司有现成的stm32f1系列单片机开发板,所以我就想到了使用它来实现这个小功能. 1. 硬件配置: 1.1. 运动自行车 ...
- STM32F1xx系列单片机通过程序获取MCU信息
在使用STM32F1xx系列单片机时可以直接在指定地址中读取单片机相关信息,在参考手册上的相关介绍如下. 通过上面的介绍可以看到,直接去这些指定地址中读取数据,就可以获取到MCU的相关信息.下来就直接 ...
- STM32系列单片机向量表和向量表重新定位
在使用STM32系列单片机的IAP升级功能时,第一行代码就是关于向量表重定位的设置. 那么这个向量表具体是什么东西?为什么可以重定位?关于这方面的资料在ARM Cortex-M3 与 Cortex-M ...
- STM32系列单片机在进入main函数前都在干些什么?
在刚开始学习单片机的时候,一直以为程序启动后就直接进入到了main函数,但是随着学习的深入才发现,程序在进入main函数前其实还要干好多事情.现在就来分析一下,STM32系列单片机程序在进入main函 ...
- 关于STM32系列单片机中断触发时间问题
在使用STM32系列单片机的时候,经常要使用到中断,但是STM32参考手册上关于中断只说明了有哪些中断源和中断向量表相关问题.没有具体说明触发中断的信号至少需要多长时间?中断检测到中断源需要多长时间? ...
最新文章
- Pytorch nn.Transformer的mask理解
- 院士:国内科研目前内卷太严重,勿简单“抬轿子”
- Hibernate的Session介绍[转 adoocoke]
- nexus 6p Android SDK,Flutter没有检测到Android SDK
- 为什么mysql第一步安装_Mysql安装步骤
- [js高手之路] vue系列教程 - vue的事件绑定与方法(2)
- coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象
- Loadrunner -27225错误
- bat命令调用rar进行文件夹压缩
- 笔记本计算机涂硅脂,图吧小白教程 篇十一:笔记本拆机换硅脂教程(大拆)...
- 必须了解的一些IT知识点
- Excel如何冻结多行多列
- ES3之cookie
- Pigeon服务的注册与发现
- 淘宝天猫自动领取喵币
- c++高效位运算函数之 __builtin_
- 科研画图都用什么软件
- 黑马瑞吉外卖项目开发笔记
- K8S YAML 详解
- 哥特巴赫猜想 尾递归 湘潭孕妇之后的自我检讨