本篇文章,我们来看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相关推荐

  1. stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...

    本期,Lucy制作了九个案例分享给大家,分别为:流水灯.按键LED.数码管.点阵.定时蜂鸣器.NTC温度计.超声波测距仪.光敏RGB灯.氛围灯(红外) Lucy无偿提供全部案例的原理图和部分案例的代码 ...

  2. 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计

    2.2 数码时间显示电路 七段LED数码管是由八个发光二极管构成,通过给其引脚不同的高低电平,从而显出0~9的数字和小数点,本文通过四个一位数码管并联通过P3口当中的P3.0与P3.1与STATIC ...

  3. 8051系列单片机汇编语言指令速查表(汇编语言的111条指

    8051系列单片机汇编语言指令速查表(汇编语言的111条指_纳兰容若的左手_新浪博客 http://blog.sina.com.cn/s/blog_6486c0b30100gqew.html 编号 指 ...

  4. 51单片机除c语言 中断嵌套,关于51系列单片机中断嵌套 - 关于单片机中断嵌套总结...

    关于51系列单片机中断嵌套 说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套.现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了. 在说到 ...

  5. pic单片机内部时钟校准c语言,PIC系列单片机片内定时器实时时钟的实现(转)

    PIC系列单片机片内定时器实时时钟的实现(转) (2008-08-11 14:24:59) 标签: 杂谈 1. 1 振荡频率的考虑 工作频率为4MHz 的单片机, 选择32. 768kHz 的晶振显然 ...

  6. stm32f1系列单片机实战应用

    最近有一个小项目,测量运动自行车速度,上传给上位机软件,处理VR视频播放.正好公司有现成的stm32f1系列单片机开发板,所以我就想到了使用它来实现这个小功能. 1. 硬件配置: 1.1. 运动自行车 ...

  7. STM32F1xx系列单片机通过程序获取MCU信息

    在使用STM32F1xx系列单片机时可以直接在指定地址中读取单片机相关信息,在参考手册上的相关介绍如下. 通过上面的介绍可以看到,直接去这些指定地址中读取数据,就可以获取到MCU的相关信息.下来就直接 ...

  8. STM32系列单片机向量表和向量表重新定位

    在使用STM32系列单片机的IAP升级功能时,第一行代码就是关于向量表重定位的设置. 那么这个向量表具体是什么东西?为什么可以重定位?关于这方面的资料在ARM Cortex-M3 与 Cortex-M ...

  9. STM32系列单片机在进入main函数前都在干些什么?

    在刚开始学习单片机的时候,一直以为程序启动后就直接进入到了main函数,但是随着学习的深入才发现,程序在进入main函数前其实还要干好多事情.现在就来分析一下,STM32系列单片机程序在进入main函 ...

  10. 关于STM32系列单片机中断触发时间问题

    在使用STM32系列单片机的时候,经常要使用到中断,但是STM32参考手册上关于中断只说明了有哪些中断源和中断向量表相关问题.没有具体说明触发中断的信号至少需要多长时间?中断检测到中断源需要多长时间? ...

最新文章

  1. Pytorch nn.Transformer的mask理解
  2. 院士:国内科研目前内卷太严重,勿简单“抬轿子”
  3. Hibernate的Session介绍[转 adoocoke]
  4. nexus 6p Android SDK,Flutter没有检测到Android SDK
  5. 为什么mysql第一步安装_Mysql安装步骤
  6. [js高手之路] vue系列教程 - vue的事件绑定与方法(2)
  7. coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象
  8. Loadrunner -27225错误
  9. bat命令调用rar进行文件夹压缩
  10. 笔记本计算机涂硅脂,图吧小白教程 篇十一:笔记本拆机换硅脂教程(大拆)...
  11. 必须了解的一些IT知识点
  12. Excel如何冻结多行多列
  13. ES3之cookie
  14. Pigeon服务的注册与发现
  15. 淘宝天猫自动领取喵币
  16. c++高效位运算函数之 __builtin_
  17. 科研画图都用什么软件
  18. 黑马瑞吉外卖项目开发笔记
  19. K8S YAML 详解
  20. 哥特巴赫猜想 尾递归 湘潭孕妇之后的自我检讨

热门文章

  1. find命令的基础用法以及按文件修改时间查找文件
  2. cad如何打开stp文件_用cad如何打开stp文件
  3. 企业注销的债权债务如何处理
  4. IP-Guard准入控制网关实现机制
  5. latex怎么打区间_latex 函数中间点
  6. [大话设计模式] 第7章: 代理模式
  7. SQL语句的五大类:DQL、DML、DDL、DTL、DCL
  8. 量化择业 银行vs券商vs公募vs私募?(行内人深度分享)
  9. C# 基础(三十一)c#实现 正弦sin、反正弦arcsin,正切tan、反正切arctan:求角度值
  10. 机房动环监控解决方案!