【经验】Silicon Labs EFR32FG14无线SOC芯片使用外设驱动代码实现串口收发数据功能的方法

2021-08-30 世强
无线SOC芯片,EFR32FG14,Silicon Labs 无线SOC芯片,EFR32FG14,Silicon Labs 无线SOC芯片,EFR32FG14,Silicon Labs 无线SOC芯片,EFR32FG14,Silicon Labs

本文以Simplicity Studio v5软件里面的wmbus_meter例程为例,介绍如何使用“SILICON LABS(芯科科技) EFM32/EFR32芯片外设驱动参考代码”来实现串口收发数据的功能。


1、下载“Silicon Labs(芯科科技) EFM32/EFR32芯片外设驱动参考代码”,本文以中断的方式来实现串口数据收发功能,打开如下路径中的main_s1_pg1_efr.c文件:Silicon Labs(芯科科技) EFM32/EFR32芯片外设驱动参考代码\peripheral_examples-master\series1\usart\async_interrupt\src。由于EFR32FG14无线SOC芯片属于序列1的芯片,所以要使用外设驱动代码中的series1的串口驱动代码。


2、在Simplicity Studio v5软件的工程文件中,右键点击工程名,点击New,再点击Source File,

在New Source File窗口中输入文件名user_usart.c,点击Finish。


以同样的方法点击Header File创建头文件user_usart.h。


3、移植如下代码到user_usart.h文件中,本文将串口缓存区BUFFER_SIZE设为80个字节,可以根据需求修改BUFFER_SIZE的大小。   

#ifndef USER_USART_H_

#define USER_USART_H_

#define BUFFER_SIZE   80

extern uint32_t rx_data_ready;

extern char rx_buffer[BUFFER_SIZE];

extern char tx_buffer[BUFFER_SIZE];

void USER_UsartInit(void);

void USER_UsartTest(void);

#endif /* USER_USART_H_ */


4、移植如下代码到user_usart.c文件中。

#include "em_cmu.h"

#include "em_gpio.h"

#include "em_usart.h"

#include "user_usart.h"


uint32_t rx_data_ready = 0;

char rx_buffer[BUFFER_SIZE];

char tx_buffer[BUFFER_SIZE];


/**************************************************************************//**

 * @brief USART0 RX interrupt service routine

 *****************************************************************************/

void USART0_RX_IRQHandler(void)

{

  static uint32_t i = 0;

  uint32_t flags;

  flags = USART_IntGet(USART0);

  USART_IntClear(USART0, flags);


  /* Store incoming data into rx_buffer, set rx_data_ready when a full

  * line has been received

  */

  rx_buffer[i++] = USART_Rx(USART0);;


  if (rx_buffer[i - 1] == '\r' || rx_buffer[i - 1] == '\f')

  {

    rx_data_ready = 1;

    rx_buffer[i - 1] = '\0'; // Overwrite CR or LF character

    i = 0;

  }


  if ( i >= BUFFER_SIZE - 2 )

  {

    rx_data_ready = 1;

    rx_buffer[i] = '\0'; // Do not overwrite last character

    i = 0;

  }

}


/**************************************************************************//**

 * @brief USART0 TX interrupt service routine

 *****************************************************************************/

void USART0_TX_IRQHandler(void)

{

  static uint32_t i = 0;

  uint32_t flags;

  flags = USART_IntGet(USART0);

  USART_IntClear(USART0, flags);


  if (flags & USART_IF_TXC)

  {

    if (i < BUFFER_SIZE && tx_buffer[i] != '\0')

    {

      USART_Tx(USART0, tx_buffer[i++]);; // Transmit byte

    }

    else

    {

      i = 0; // No more data to send

    }

  }

}


/******************************************************************************

 * @brief Usart Init function

 *****************************************************************************/

void USER_UsartInit(void)

{

  USART_InitAsync_TypeDef init = USART_INITASYNC_DEFAULT;

  char welcome_string[] = "Silicon Labs UART Code example!\r\f";

  uint32_t i;


  // Enable oscillator to GPIO and USART0 modules

  CMU_ClockEnable(cmuClock_GPIO, true);

  CMU_ClockEnable(cmuClock_USART0, true);


  // set pin modes for USART TX and RX pins

  GPIO_PinModeSet(gpioPortB, 15, gpioModeInput, 0);       //RX: PB15

  GPIO_PinModeSet(gpioPortB, 14, gpioModePushPull, 1);    //TX: PB14


  // Initialize USART asynchronous mode and route pins

  USART_InitAsync(USART0, &init);

 //PB15->RX: Location 9, PB14->TX: Location 9

  USART0->ROUTELOC0 = USART_ROUTELOC0_RXLOC_LOC9 | USART_ROUTELOC0_TXLOC_LOC9; 

  USART0->ROUTEPEN |= USART_ROUTEPEN_TXPEN | USART_ROUTEPEN_RXPEN;


  //Initializae USART Interrupts

  USART_IntEnable(USART0, USART_IEN_RXDATAV);

  USART_IntEnable(USART0, USART_IEN_TXC);


  //Enabling USART Interrupts

  NVIC_EnableIRQ(USART0_RX_IRQn);

  NVIC_EnableIRQ(USART0_TX_IRQn);


  // Print welcome message

  for (i = 0 ; welcome_string[i] != 0; i++)

  {

    tx_buffer[i] = welcome_string[i];

  }

  USART_IntSet(USART0, USART_IFS_TXC);

}


/******************************************************************************

 * @brief Usart Init function

 *****************************************************************************/

void USER_UsartTest(void)

{

  uint32_t i;


  /* When notified by the RX handler, copy data from the RX buffer to the

   * TX buffer, and start the TX handler */

  if (rx_data_ready)

  {

    USART_IntDisable(USART0, USART_IEN_RXDATAV);

    USART_IntDisable(USART0, USART_IEN_TXC);


    for (i = 0; rx_buffer[i] != 0 && i < BUFFER_SIZE-3; i++)

    {

      tx_buffer[i] = rx_buffer[i];

    }


    tx_buffer[i++] = '\r';

    tx_buffer[i++] = '\f';

    tx_buffer[i] = '\0';

    rx_data_ready = 0;


    USART_IntEnable(USART0, USART_IEN_RXDATAV);

    USART_IntEnable(USART0, USART_IEN_TXC);

    USART_IntSet(USART0, USART_IFS_TXC);

  }

}


5、根据实际使用的串口引脚修改USER_UsartInit()函数,本文使用了PB15作为串口的RX引脚,PB14作为串口的TX引脚。如果实际应用中使用的串口引脚跟本文不一样,需要修改GPIO_PinModeSet()里面的引脚参数;同时还得修改USART0->ROUTELOC0的LOCATION参数,EFR3FG14的USART0外设可以通过不同引脚来实现,所以需要使用LOCATION来确实由哪个引脚来实现;从EFR32FG14的数据手册可以查询到:PB15作为USART0的RX引脚时LOCATION参数为9,PB14作为USART0的TX引脚时LOCATION参数也是9。如果使用其他引脚,则将RX和TX的LOCATION参数都改为相应的编号。



6、在mian.c文件中包含头文件:#include "user_usart.h"。


7、在mian()函数中增加串口初始化代码“USER_UsartInit(); ”,在while()循环中增加串口测试代码“USER_UsartTest();”。


8、执行以上步骤之后,整个串口驱动代码已经移植完成了,不过有以下三个地方会影响到串口测试,需要注意一下。

第一点就是如果工程使用了休眠功能,则在EFR32FG14休眠的时候会影响到串口数据收发功能。由于wmbus_meter例程默认使能了休眠功能,为了方便测试,本文在wmbus_meter.slcp的SOFTWARE COMPONENTS中,搜索sleep,点击Flex-RAIL Power Manager Sleep,并点击Uninstall,将休眠功能关闭。

第二点需要检查SOFTWARE COMPONENTS中是否已经安装了USART外设,如果没有安装USART外设,编译程序会报没有定义USART_RX和USART_TX错误。

第三点就是如果设计EFR32FG14模块的时候没有使用EFR32FG14芯片内部的DCDC转换器来供电,则需要将SOFTWARE COMPONENTS里面Device Init: DC-DC的Enable DC/DC converter取消勾选,不然EFR32FG14模块可能会出现断电后重新上电就不能正常工作的情况。


9、编译程序并把固件烧录到EFR32FG14模块中,在模块上电时,串口会打印“Silicon Labs UART Code example!”,给EFR32FG14的串口发送“hello”加回车时,EFR32FG14会回复“hello”。至此,EFR32FG14增加串口收发数据功能完成。

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】使用频谱仪测试无线模块EFR32FG23的发射功率和频偏的方法

本文使用Silicon Labs无线SoC芯片EFR32FG23的BRD4265B无线模块作为测试对象,介绍如何使用Simplicity Studio 5软件配置railtest工程,并使用频谱仪测试EFR32FG23模块的发射功率和频偏的方法。

设计经验    发布时间 : 2022-03-02

【经验】基于Silicon Labs无线SoC芯片MG24开发套件的Matter入门指导文章汇总

本文主要介绍基于Silicon Labs MG24开发套件的Matter入门指导文章汇总。

设计经验    发布时间 : 2023-06-30

如何用EFR32FG23无线SoC芯片读取平均RSSI?

本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取某个信道的平均RSSI的方法。

设计经验    发布时间 : 2024-03-07

【经验】Simplicity Studio v5软件导出和导入工程文件的方法介绍

在调试Silicon Labs的无线SoC芯片程序的时候,有时需要在Simplicity Studio v5软件导出工程文件或导入工程文件。本文以EFR32FG14无线SoC芯片的simple_trx工程为例,介绍如何导出和导入工程文件的方法。

设计经验    发布时间 : 2021-08-17

【经验】如何使用RAILTEST程序测试无线SoC芯片EFR32MG的蓝牙性能?

使用过Silicon Labs无线SoC芯片EFR32MG的Zigbee功能的工程师多数已经习惯使用Railtest软件对Zigbee性能做测试,而在Railtest软件下也可以对BLE性能做测试。本文将介绍具体的设置步骤与注意事项。

设计经验    发布时间 : 2020-09-26

EFR32FG23无线SoC芯片读取数据包实时RSSI值的方法

本文以Silicon Labs的EFR32FG23无线SoC芯片的rail_soc_simple_trx工程为例,介绍EFR32FG23芯片读取数据包的实时RSSI值的方法。

设计经验    发布时间 : 2024-03-07

【经验】使用串口来升级EFR32FG23无线SoC芯片固件的方法

本文主要介绍如何使用BootLoader——NCP UART XMODEM工程实现使用串口升级Silicon Labs EFR32FG23无线SoC芯片固件的方法。

设计经验    发布时间 : 2022-09-01

【经验】无线SoC芯片EFR32MG21手动生成OTA文件的方法与注意事项

在使用SILICON LABS无线SoC芯片EFR32MG21芯片设计ZigBee产品时,我们会用到OTA功能,这就要产生OTA文件。EmberZNet 6.x版本的项目中会自动为启用了OTA客户端插件的项目创建OTA文件,需要我们手动去创建OTA文件。

设计经验    发布时间 : 2023-05-24

【经验】配置迈斯威志WizPro200EFM烧录器实现脱机烧录无线SoC芯片EFR32MG21固件的方法

Silicon Labs的EFR32MG21无线SoC芯片,主要用于ZigBee和Matter设备。本文主要介绍如何配置迈斯威志WizPro200EFM烧录器,实现脱机烧录EFR32MG21无线SoC芯片固件的方法。

设计经验    发布时间 : 2023-01-21

EFR32无线通信模块AN002——BootLoader(standalone)

Silicon Labs的EFR32系列无线SoC芯片提供了Gecko Bootloader支持设备更新应用程序,Gecko Bootloader分两种模式,一种模式称为standalone bootloader,另一种模式称为application bootloader。本文指导大家配置Standalone Bootloader工程,并对应用程序更新。

设计经验    发布时间 : 2018-06-26

【经验】无线SoC芯片EFR32MG21程序中MFG_SECURITY_CONFIG参数的设置与功能

在无线SoC芯片EFR32MG21的ZigBee默认Z3Light程序运行时我们可以通过keys print这个CLI命令打印NWK key与TC Link Key等密钥参数,打印的效果如下,那我们是否可以隐藏这些密钥无法打印呢?

设计经验    发布时间 : 2023-05-26

【经验】使用Simplicity Commander工具对无线SoC芯片EFR32FG23执行recover的方法

在使用芯科科技EFR32FG23时,有时一些错误的操作会导致芯片烧录一次固件之后就不能重新烧录,或无法识别到芯片等问题,需要对芯片执行recover。本文主要介绍使用Simplicity Commander工具对EFR32FG23执行recover的方法。

设计经验    发布时间 : 2022-01-15

EFR32无线通信模块AN100——蓝牙BLE(创建工程)

EFR32标准模块,是世强独立研发,供用户学习、使用的射频模块。这个模块搭载SILICON LABS多频段多协议的EFR32MG系列无线SOC芯片EFR32MG12P433F1024GM48,此文档基于一站式开发平台simplicity studio V4(以下简称SSv4)和EFR32标准模块,介绍如何创建蓝牙工程,编译和代码下载。

设计经验    发布时间 : 2018-06-20

【应用】Silicon Labs新一代Sub-G无线SoC芯片EFR32FG23用于智能表计,接收电流仅为3.7mA

Silicon Labs推出了新一代的Sub-G无线SoC芯片EFR32FG23,相对于上一代,它拥有更强的MCU、更低的功耗、更高的安全性等。EFR32FG23是适用于智能家居、安防、照明、楼宇自动化和表计的Sub-G物联网无线连接的理想解决方案。

应用方案    发布时间 : 2021-10-26

【经验】校准使用TCXO晶振的无线SoC芯片EFR32FG23频偏的方法

当无线SoC芯片EFR32FG23使用TCXO晶振时,无法通过修改Ctune值的方式来校准频偏。本文主要介绍通过设置频率offset值的方式,来校准使用TCXO晶振的EFR32FG23芯片频偏的方法。

设计经验    发布时间 : 2022-09-25

展开更多

电子商城

查看更多

只看有货

品牌:SILICON LABS

品类:Flex Gecko Proprietary Protocol SoC

价格:¥14.0298

现货: 598

品牌:磐启微电子

品类:无线SOC芯片

价格:

现货: 0

品牌:SILICON LABS

品类:Wireless Gecko SoC

价格:¥8.1764

现货: 110,879

品牌:SILICON LABS

品类:Wireless SoC

价格:¥21.5556

现货: 103,736

品牌:SILICON LABS

品类:Mighty Gecko Multi-Protocol Wireless SoC

价格:¥27.0929

现货: 98,034

品牌:SILICON LABS

品类:Wireless SoC

价格:¥9.1982

现货: 88,300

品牌:SILICON LABS

品类:8位MCU

价格:¥5.8534

现货: 76,212

品牌:SILICON LABS

品类:Wireless SoC

价格:¥19.9760

现货: 74,309

品牌:SILICON LABS

品类:Wireless SoC

价格:¥27.2234

现货: 72,520

品牌:SILICON LABS

品类:Wireless SoC

价格:¥22.1593

现货: 72,480

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:SILICON LABS

品类:Switch Hall Effect Magnetic Position Sensor

价格:¥2.2924

现货:150,000

品牌:SILICON LABS

品类:Light Sensor

价格:¥20.3400

现货:28,003

品牌:SILICON LABS

品类:Position Sensor

价格:¥3.0897

现货:12,568

品牌:SILICON LABS

品类:8位MCU

价格:¥4.9000

现货:12,000

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥10.1700

现货:10,000

品牌:SILICON LABS

品类:Gecko MCU

价格:¥15.6000

现货:5,353

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.7900

现货:3,451

品牌:SILICON LABS

品类:Wireless SoC

价格:¥15.1400

现货:1,455

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥11.1200

现货:1,201

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥16.8500

现货:550

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

物联网天线方案设计/虚拟天线芯片方案设计

Ignion可支持多协议、宽频段的物联网天线方案设计,协议:Wi-Fi、Bluetooth、UWB、Lora、Zigbee、2G、3G、4G、5G、CBRS、GNSS、GSM、LTE-M、NB-IoT等,频段范围:400MHz~10600MHz。

最小起订量: 2500 提交需求>

EDA芯片设计软件免费使用

世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。

实验室地址: 深圳 提交需求>

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面