EFR32MG裸机工程-4-UART

转载请注明出处,谢谢!

Newbit-Msming 2018-09-19

环境:Windows 10、Simplicity Studio 4

SDK: Gecko SDK Suite

工程:自建

1、 参考《EFR32MG裸机工程-1-新建》,新建一个空白工程;

2、 在工程中点击右键,New -> Other ->Simlicity Studio -> Simplicity Configurator Document -> Next,填写路径和文件名。
新建
3、 打开.hwconf文件,并添加USART0,注意下图标号“4”,好像不能手动添加最后的几行,解决方法是直接更改文本文件,文本如下:

<property object="USART0" propertyId="ABPeripheral.included" value="true"/>
<property object="USART0" propertyId="USART.BSP_USART_MISO.PIN" value="PA1"/>
<property object="USART0" propertyId="USART.BSP_USART_MOSI.PIN" value="PA0"/>
<property object="USART0" propertyId="USART.BSP_USART_RX.PIN" value="PA1"/>
<property object="USART0" propertyId="USART.BSP_USART_TX.PIN" value="PA0"/>
<property object="USART0" propertyId="USART.HAL_USART_RXSTART.INT" value="16"/>
<property object="USART0" propertyId="USART.HAL_USART_RXSTOP.INT" value="16"/>
<property object="USART0" propertyId="USART.HAL_USART_RX_QUEUE_SIZE.INT" value="128"/>
<property object="USART0" propertyId="USART.HAL_USART_TX_QUEUE_SIZE.INT" value="128"/>
<property object="USART0" propertyId="USART.showadvanced.BOOL" value="1"/>

USART0

4、 添加Serial,需要添加的文本如下:

<property object="SERIAL" propertyId="ABPeripheral.included" value="true"/>
<property object="SERIAL" propertyId="SERIAL.BSP_SERIAL_APP_PORT.MOD" value="USART0"/>
<property object="SERIAL" propertyId="SERIAL.HAL_SERIAL_USART0_ENABLE.BOOL" value="1"/>
<property object="SERIAL" propertyId="SERIAL.showadvanced.BOOL" value="1"/>

改完后,保存或者在下图左边的区域点击右键-> Generate Source就会自动生成代码文件“hal-config.h”
Serial

5、 选中工程右击:”Project Name” -> ”Properties” -> ”C/C++ Build” -> ”Project Modules” -> “HAL Config” - > “SERIAL”,双击 ”SERIAL” 添加 ”SERIAL” 模块。
SERIAL
6、 参考步骤3、4、5添加”LED”和”BUTTON”模块。

7、 添加必要的路径和宏定义,如下图。
Include

8、 新建一个com.c文件取代添加SERIAL模块时链接到工程的文件,然后注释一行代码,因为这行代码需要链接很多文件,在简单的工程不需要这么麻烦,代码如下:
//assert(false);
assert
new
9、 还有很多文件需要添加和链接,具体请查看附件。

10、 main函数代码如下,将从UART收到的数据发回去:

#include "em_device.h"
#include "em_chip.h"
#include PLATFORM_HEADER
#include "stack/include/ember-types.h"

#include "led.h"
#include "button.h"
#include "com.h"
#include "serial/serial.h"

unsigned long i;
uint8_t data[20];
uint16_t len = 0;
uint16_t readByte;
uint16_t startTime;

int main(void)
{
  /* Chip errata */
  CHIP_Init();

  halInternalInitLed();
  halInternalInitButton();
  emberSerialInit(COM_USART0, 115200, 0, 1);
  /* Infinite loop */
  while (1) {

	  len = emberSerialReadAvailable(COM_USART0);
	  if(len)
	  {
		  i=0xFFF;
		  while(i--);
		  len = emberSerialReadAvailable(COM_USART0);
		  if(len)
		  {
			  halToggleLed(BOARDLED0);
			  emberSerialReadData(COM_USART0, data, len, &readByte);
			  emberSerialPrintf(COM_USART0, "RX %d %d\n", len, readByte);
			  emberSerialPrintf(COM_USART0, data, readByte);
			  emberSerialPrintf(COM_USART0, "\n");
		  }
		  len = 0;
	  }
  }
}

11、 烧录的时候烧录bin或者hex文件;

12、 代码请查看附件。

13、 对于EFR32MG系列来说,会使用Silicon Labs配套的协议SDK才是重点,而且裸机工程用处不大,使用起来也比较复杂,所以知道大概原理就好,其他外设就不去摸索了。

14、 附上一个官方的裸机工程代码包,里面包含了各种各样外设例子,不过有些芯片没有对应的例程,自己改一下就行了。

本例代码:EFR32MG1P132F256GM48-UART
代码包链接:EFR32外设基础例程

常驻:NewBit Studio

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值