温湿度设计 (自制温湿度控制器设计图)

基于HC32F120的温湿度计,会比小米的温湿度计香吗?

创易栈最近推出了个创作者激励的活动,于是画了块基于HC32F120的温湿度计,看手册花了挺多时间的,然后参考官方的参考设计完成硬件设计,在嘉立创上打板,在创易栈的样品商城购买样品焊接,在这个平台分享一下我的小制作,本文主要介绍HC32F120设计的要点和固件库使用的注意事项,希望对要进行国产替代的开发者提供些思路,不足之处还望指正。最值得看的是注意事项,避免踩坑。

一、HC32F120介绍

1.1 特性 内置存储器:最大 64KByte 的 Flash memory,支持安全保护,最大 4KByte 的 SRAM;

低功耗运行:外设功能可以独立关闭或开启,低功耗模式:Sleep,Stop 模式;

最多 12 通道 12bit 1MSPS ADC,支持单次/扫描变换,支持各个 Timer 事件触发开始变换;

定时器:8 个多功能 16bit 通用 Timer(TimerB),支持输入捕捉、输出比较、PWM 输出;

1 个 I2C,支持 7 位/10 位地址格式;

4 个 USART,其中 1 个 UART 支持 LIN 总线协议。支持全双工和半双工异步通信;

1 个 SPI,支持 16bit 数据宽度。

1.2 参考链接

华大半导体HC32F120官网: https://hdsc.com.cn/Category83-1469

创易栈样品商城:微信关注创易栈后,在公众号里可以进入样品商城。

二、板子制作

2.1 硬件设计

基于单片机的温湿度设计方案,自制温湿度控制器设计

MCU模块:REGC引脚接一个0.47uF的电容稳定内核电源域,VDD引脚接一个100nF的解耦电容,复位引脚低电平时复位,MD引脚接一个10k的上拉电阻。

电源模块:采用两节1.5v的干电池经过DC-DC升压芯片HT7733给系统供电。

*载下**和调试模块:采用SWD的方式进行*载下**和调试。

晶振模块:外部连接一个20MHz的无源晶振作为高速外部时钟源。

显示模块:使用iic接口的0.96寸OLED作为温湿度显示模块。

传感器模块:使用SHT20采集环境的温湿度。

2.2 打样

基于单片机的温湿度设计方案,自制温湿度控制器设计

PCB画好后通过嘉立创下单,每个月有2次免费打样的机会。

2.3 物料购买和焊接实物

基于单片机的温湿度设计方案,自制温湿度控制器设计

立创商城上的物料有些已经缺货,后来想到创易栈的样品商城,在上面购买到了样品,手上还有几篇华大F4的片子,现在创易栈的样品商城已经没有了,航顺的有些还不错的样品在立创商城已经断货,感兴趣的可以在创易栈的样品商城逛逛。

三、软件设计

3.1 iic初始化

不需要像stm32那样需要初始化i2c外设的gpio,通过GPIO_SetFunc设置IO的复用功能,通过CLK_FcgPeriphClockCmd使能i2c的时钟,填充i2c的初始化结构体stcI2cInit后对i2c外设进行初始化,最后通过I2C_Cmd(Enable)使能i2c外设。

基于单片机的温湿度设计方案,自制温湿度控制器设计

3.2 sht20初始化

通过i2c向sht20发送0xff后复位sht20完成初始化。

基于单片机的温湿度设计方案,自制温湿度控制器设计

3.3 调试串口初始化

初始化串口的波特率为115200。

基于单片机的温湿度设计方案,自制温湿度控制器设计

3.4 读取温湿度函数

参考HC32F120的DDL库的i2c例程,编写读取sht20温湿度的函数。

基于单片机的温湿度设计方案,自制温湿度控制器设计

基于单片机的温湿度设计方案,自制温湿度控制器设计

四、注意事项

1、一开始遇到的问题是i2c参数设置无效,我发现调小波特率时OLED的刷屏还是一样的快,下图中的断言需要打开,不光是要设置波特率这个参数,还需要设置好分频因子,断言打开后根据断言的错误调整分频因子去适配波特率。

基于单片机的温湿度设计方案,自制温湿度控制器设计

2、要使用jlink进行*载下**和防止,stlink和cmsis-dap我都试过,不行,只有通过jlink进行*载下**。

基于单片机的温湿度设计方案,自制温湿度控制器设计

3、这颗芯片的存储器映射有位段空间,固件库中i2c产生起始信号就是通过位段空间控制相应寄存器的相应位,如下所示的代码:

基于单片机的温湿度设计方案,自制温湿度控制器设计

4、时钟初始化函数不在main函数里,而是在启动汇编文件里由SystemInit完成。