FastBond3挑战部分-基于STM32G030的功能验证板设计
该项目使用了STM32G030C8T6,实现了基于STM32G030的功能验证板的设计,它的主要功能为:温湿度传感器,串口调试、Type-c供电通信、RS485通信功能。
标签
嵌入式系统
STM32
申小林
更新2024-09-06
11577

1 创意方向

STM32G030C8T6是一款高性价比的芯片,在市场中特别适用于工业自动化、物联网(IoT)、消费电子、医疗设备等行业,并且STM32G030微控制器因其高性能、低功耗和丰富的外设接口,被广泛应用于用于控制和监测工业设备,如机器人、传感器、执行器、作为物联网设备中的嵌入式系统,实现数据采集、处理和传输,控制和处理各种家用电器,如智能家居设备、智能电视、智能音箱,控制和监测医疗设备,如生命支持系统、医疗成像设备,交通信号控制、车辆监测、车载娱乐系统和智能网联等等多个领域。

我们之所以设计这款开发板主要原因是由于芯片的应用领域广,但是市面上的开发板较少,很少将所有的IO引出来,并且开发板上配有的外设以及传感器较少,所以希望可以做一款开发板让大家能做一个全面的功能性验证。

2 创意方案

整个的创意方案框图如下后面将从软件部分和硬件部分做深入解说。

2.1 硬件设计框图

整个硬件电路除了必要的固定功能的IO引脚,我们都将其他的引脚引出来了,并且配置了两个通信接口,使用了最流行的Type-C的接口。

主要的接口列举如下:

1UART接口:1个,支持115200波特率,

2Type-C接口:1个,支持供电以及串口通信的功能

3LED灯:1 知识当前的状态

4IO口:40个,包含3.3V供电端口以及通用的IO

5SHTC3:温湿度传感器1个,方便采集温湿度传感器

6:按键:3个按键,方便做IO口的驶入检测

7RS485:包含了1RS485接口,方便远距离通信

8RTC,包含了RTC接口,可以支持实时RTC时钟,保证时间的准确性。

9:调试接口:支持SWD接口以及调试接口供电功能,保证程序下载以及程序升级功能。

2.2软件设计流程

 

软件处理流程非常简单,就是读取当前的温湿度以及IO状态并且上报,客户也可以根据自己的实际需求来进行操作。

3 方案器件介绍

 

STM32G030是意法半导体(ST)推出的一系列基于高性能Arm®Cortex®-M0+ 32RISC核心的微控制器(MCU)。这一系列微控制器以其高性能、低功耗以及丰富的外设接口而广受欢迎,被广泛应用于各种嵌入式系统中。

主要特点

高性能内核STM32G030系列采用ARM Cortex-M0+内核,工作频率高达64MHz,能够运行高度优化的指令集,提供高效的数据处理能力。

丰富的内存资源:该系列微控制器配备了高速嵌入式存储器,包括8KBSRAM和高达64KB(或32KB,具体型号可能有所不同)的Flash程序存储器,具有读取保护和书写保护功能。

多种外设接口STM32G030系列提供了丰富的外设接口,包括SPII2CUSARTUSB等,方便与各种传感器、执行器以及其他设备进行通信。

低功耗设计:该系列微控制器支持多种低功耗模式,如停机模式和待机模式,可以有效降低功耗,延长电池寿命。

高级安全特性:部分型号支持JTAG和调试接口的加密和锁定,以及硬件随机数发生器和加密单元,提供更高的安全性。

 4 硬件介绍

整个硬件的部分电路图如下,我们将进行分别介绍

4.1 供电

供电使用了Type-C接口供电,兼顾了USB供电以及串口通信的功能,USB转串口芯片使用了CH340N的芯片,供电端还加了二极管,带有防反接保护,同时避免Type-C拱顶错误导致电路板的烧坏。

 

4.2 RS485接口

RS485接口是作为对外的接口进行通信的,这里使用了IO引脚进行了传输方向的控制。

4.3 最小系统以及IO引脚

在G030的核心电路中,我们使用8M的外部晶振保证系统稳定运行,并且将所有的IO都做了引出,方便大家做功能性的验证,同时还带有SHTC3的温湿度传感器。G030 自带RTC控制器,外部我们加了32.768的晶振,方便调试时钟电路。


4.4 电路板实物展示




5 软件代码

5.1 STHC3温湿度代码


/*================================================================
【 Name 】void SoftReset(void)
【Function】SHTC3软件复位,主函数中调用
【 Notes 】从高到低,依次接收
================================================================*/
void SoftReset(void)
{
I2CInit(); //I2C initialize
I2CStart(); //start I2C
I2C_Write_Byte(SHTC3ADDR&0xfe); //I2C address + write
I2CDelay(5);
I2C_Write_Byte(0x80); //soft reset MSB
I2C_Write_Byte(0x5D); //soft reset LSB
I2CStop(); //stop I2C
}


/*================================================================
【 Name 】float ReadShtc3(char whatdo)
【Function】非主机模式,读取函数函数
【 Notes 】
================================================================*/
void ReadShtc3(void)
{
unsigned int HumData,TempData;
//====
I2CStart();
I2C_Write_Byte(SHTC3ADDR&0xfe); //I2C address + write + ACK
I2C_Write_Byte(0X35); //Wakeup MSB 唤醒
I2C_Write_Byte(0X17); //Wakeup LSB
I2CStop();
//====
HAL_Delay(10);
I2CStart();
I2C_Write_Byte(SHTC3ADDR&0xfe); //I2C address + write + ACK
I2C_Write_Byte(0X58); //Measurement command MSB 湿度值优先 不锁存SCL时钟线
I2C_Write_Byte(0XE0); //Measurement command LSB
I2CStop();
HAL_Delay(100); //等待测量完成
I2CStart();
I2C_Write_Byte(SHTC3ADDR|0x01); //I2C address + read 可通过ACK来判断是否测量完成。完成则有响应
HAL_Delay(1);
HumData = I2C_Read_Byte(ACK); //Data(MSB) 先读湿度
HumData=HumData<<8;
HumData |= I2C_Read_Byte(ACK); //Data(LSB)
I2C_Read_Byte(ACK);

TempData = I2C_Read_Byte(ACK); //Data(MSB) 后读温度
TempData=TempData<<8;
TempData |= I2C_Read_Byte(ACK); //Data(LSB)
I2C_Read_Byte(NACK);
I2CStop(); //Stop I2C

I2CStart();
I2C_Write_Byte(SHTC3ADDR&0xfe); //I2C address + write + ACK
I2C_Write_Byte(0XB0); //Sleep MSB 进入休眠
I2C_Write_Byte(0X98); //Sleep LSB
I2CStop();

/*-- calculate relative humidity [%RH] --*/
Humidity =(HumData*100.0)/65536; //公式: RH%=100 * SRH/2^16
//Humidity =HumData;
/*-- calculate temperature [°C] --*/
Temperature = (TempData*175.0)/65536-45; //公式:T= -45 + 175 * ST/2^16
//Temperature = TempData;
}
unsigned char ReadID(void)
{
unsigned char ID_Data=0;
I2CStart();
I2C_Write_Byte(SHTC3ADDR&0xfe); //I2C address + write + ACK
I2C_Write_Byte(0XEF); //Measurement command MSB 湿度值优先 不锁存SCL时钟线
I2C_Write_Byte(0XC8); //Measurement command LSB
I2CStop();
HAL_Delay(100); //等待测量完成

I2CStart();
I2C_Write_Byte(SHTC3ADDR|0x01); //I2C address + read 可通过ACK来判断是否测量完成。完成则有响应
HAL_Delay(1);
ID_Data = I2C_Read_Byte(NACK); //Data(MSB) 先读湿度
I2CStop();

return ID_Data;
}
void SHTC3_Init(void)
{
I2CInit();//--IIO
SoftReset();
HAL_Delay(500);
}

5.2 IO采集代码


void LED_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Pin = GPIO_PIN_13;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);


__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}



5.3 整体代码说明

int main(void)
{

HAL_Init();

SystemClock_Config();
LED_Init();
SHTC3_Init();
UART_Init();
while (1)
{
LED_Test();
DI1=HAL_GPIO_ReadPin( GPIOD,GPIO_PIN_0);
DI2=HAL_GPIO_ReadPin( GPIOD,GPIO_PIN_1);
ReadShtc3();
printf("Resault:\r\n");
printf("Temp :%f ",Temperature);
printf("Humi :%f ",Humidity);
printf("PD0 :%d ",DI1);
printf("PD1 :%d\r\n",DI2);

}
/* USER CODE END 3 */
}

5.4 实现展示照片

我们的功能是实现IO口的读取以及温湿度的读取,并且通过串口打印出来,上面展示的就是读取到的温湿度值以及IO的状态值。


6 总结

STM32G030C8T6是一款高性价比的芯片,在市场中特别适用于工业自动化、物联网(IoT)、消费电子、医疗设备等行业,并且STM32G030微控制器因其高性能、低功耗和丰富的外设接口,被广泛应用于用于控制和监测工业设备,这次的项目主要是为了搭建一个通用的芯片测试平台,通过对软件和硬件资源的需求情况的不同,大家可以选择不同的传感器,搭建自己的传感器终端产品,也希望自己的设计能够帮助到更多的工程师,让他们一起进步。

在此也要感谢电子森林的平台以及得捷的赞助,让我的这个设计可以落地。





KiCad文件
使用说明
全屏
附件下载
程序-STM32G030Demo.rar
团队介绍
个人参赛
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号