Proteus仿真STM32读取DHT11并串口打印输出

       心血来潮,来试试proteus里STM32的仿真功能,我选用的是STM32F103C8T6这款入门级芯片。

       踩了不少坑,因此写篇博文记录一下。

1. KEIL5  v537版本以后 VERSION5 版本解释器缺失

       开始采用的是嵌入式技术公开课邴哲松老师写的代码,是keil4版本,采用最新的V6.19解释器报错。

安装最新版keil5编译报错*** target ‘target 1‘ uses arm-compiler ‘default compiler version 5‘ which i,keil5.37版_keil5编译miss_Score A的博客-CSDN博客

      解决方案:

        去ARM官网注册账号,拿到安装包,独立安装。

                https://developer.arm.com/downloads/-/legacy-compilers

      

 点击如上位置。

Proteus仿真STM32读取DHT11并串口打印输出_第1张图片

选择合适的版本。

Proteus仿真STM32读取DHT11并串口打印输出_第2张图片

注意:推荐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博客

Proteus仿真STM32读取DHT11并串口打印输出_第3张图片

至此,KEIL4写的代码KEIL5报错的坑已经解决。 

2.STM32串口打印乱码

初始布置参考这篇,芯片选STM32F103C8,编译器空着

使用Proteus仿真运行stm32程序_Mirecz的博客-CSDN博客

电路布置

Proteus仿真STM32读取DHT11并串口打印输出_第4张图片

PA7---- DHT11的数据线

PA9---- 接UART1的RX,复用推挽输出

(1)报错 No power supply specified for net VDDA/VSSA in Power Rail Configuration

Proteus仿真报错——No power supply specified for net VDDA/VSSA in Power Rail Configuration_Ren-yuhao的博客-CSDN博客_proteusnopowersupply

VDDA 、VSSA移到对应的VDD/VCC 和GND即可

(2)串口打印乱码

        主要检查几个问题:

        1. 波特率是否正确,显示器的波特率和代码的波特率要对应。只要相同就可以,9600 115200都是可以的

 Proteus仿真STM32读取DHT11并串口打印输出_第5张图片

 Proteus仿真STM32读取DHT11并串口打印输出_第6张图片

        2. 晶振频率设置

Proteus仿真STM32读取DHT11并串口打印输出_第7张图片

 和里的

Proteus仿真STM32读取DHT11并串口打印输出_第8张图片

 这个里的一个必须要对应。

 然后非常关键的一步!!!注意注意注意

在main()函数里的第一行添加

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//用proteus仿真用到,一定要写在开头。

或者 

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//用proteus仿真用到,一定要写在开头。

代码正确示范:

Proteus仿真STM32读取DHT11并串口打印输出_第9张图片

上面HSE是8M,那就开HSE 8M,然后仿真开8M即可。。。 

务必确定其中的一个开启,并且是8Mhz。

然后添加hex文件,点击仿真按钮就可以顺利仿真了。

正确示范:

Proteus仿真STM32读取DHT11并串口打印输出_第10张图片

 要是晶振频率不正确,会出现乱码。比如我这里在proteus里设置 9M。

错误示范:

Proteus仿真STM32读取DHT11并串口打印输出_第11张图片

补充问题:用到了滴答定时器,但是设置滴答定时器的是满频率72Mhz,由于此处晶振变成了8M,因此滴答定时器的计时就不准确了。原来定时1s,现在是9s。

因此作如下粗略修改。(不推荐,最好还是把滴答定期的频率改成8M)

Proteus仿真STM32读取DHT11并串口打印输出_第12张图片

希望对各位有用!!!! 

你可能感兴趣的:(stm32,proteus,单片机)