转载请注明出处,谢谢!
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"/>
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”
5、 选中工程右击:”Project Name” -> ”Properties” -> ”C/C++ Build” -> ”Project Modules” -> “HAL Config” - > “SERIAL”,双击 ”SERIAL” 添加 ”SERIAL” 模块。
6、 参考步骤3、4、5添加”LED”和”BUTTON”模块。
7、 添加必要的路径和宏定义,如下图。
8、 新建一个com.c文件取代添加SERIAL模块时链接到工程的文件,然后注释一行代码,因为这行代码需要链接很多文件,在简单的工程不需要这么麻烦,代码如下:
//assert(false);
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外设基础例程