Proteus仿真STM32读取DHT11并通过串口实时输出温湿度数据
心血来潮,来试试proteus里STM32的仿真功能,我选用的是STM32F103C8T6这款入门级芯片。
踩了不少坑,因此写篇博文记录一下。
1. KEIL5 v537版本以后 VERSION5 版本解释器缺失
开始采用的是嵌入式技术公开课邴哲松老师写的代码,是keil4版本,采用最新的V6.19解释器报错。
解决方案:
去ARM官网注册账号,拿到安装包,独立安装。
https://developer.arm.com/downloads/-/legacy-compilers
点击如上位置。
选择合适的版本。
注意:推荐R504版本,反正R506(960)版本还是报错 .
然后添加至下载队列,就拿到安装包了。
后续操作参考这篇,注意安装的时候一定要修改至对应的路径。
C:\Keil_v5\ARM\ARM_Compiler_5.06u7 名字随便写 我后面是5.04u1uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. MDK5.37安装ARM_Compiler_5_呈叙墨客的博客-CSDN博客
至此,KEIL4写的代码KEIL5报错的坑已经解决。
2.STM32串口打印乱码
初始布置参考这篇,芯片选STM32F103C8,编译器空着
使用Proteus仿真运行stm32程序_Mirecz的博客-CSDN博客
电路布置
PA7—- DHT11的数据线
PA9—- 接UART1的RX,复用推挽输出
(1)报错 No power supply specified for net VDDA/VSSA in Power Rail Configuration
把VDDA 、VSSA移到对应的VDD/VCC 和GND即可
(2)串口打印乱码
主要检查几个问题:
1. 波特率是否正确,显示器的波特率和代码的波特率要对应。只要相同就可以,9600 115200都是可以的
2. 晶振频率设置
和<stm32f10x.h>里的
这个里的一个必须要对应。
然后非常关键的一步!!!注意注意注意
在main()函数里的第一行添加
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//用proteus仿真用到,一定要写在开头。
或者
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//用proteus仿真用到,一定要写在开头。
代码正确示范:
上面HSE是8M,那就开HSE 8M,然后仿真开8M即可。。。
务必确定其中的一个开启,并且是8Mhz。
然后添加hex文件,点击仿真按钮就可以顺利仿真了。
正确示范:
要是晶振频率不正确,会出现乱码。比如我这里在proteus里设置 9M。
错误示范:
补充问题:用到了滴答定时器,但是设置滴答定时器的是满频率72Mhz,由于此处晶振变成了8M,因此滴答定时器的计时就不准确了。原来定时1s,现在是9s。
因此作如下粗略修改。(不推荐,最好还是把滴答定期的频率改成8M)
希望对各位有用!!!!