标题: Proteus+stm32f103c6串口仿真程序及注意事项 [打印本页]

作者: liuchsxian    时间: 2019-9-17 10:56
标题: Proteus+stm32f103c6串口仿真程序及注意事项
在用proteus 仿真 stm32f103c6串口时,发现stm32主频不能超过55MHz,参见proteus的 sample project,我把倍频系数设为6,同时仿真主频需设为倍频系数*8M(晶振频率),串口波特率不受限制。参见附件

proteus仿真串口前必读事项
1、    proteus Virtual Terminal 串口波特率没有限制(推荐9600;)
2、    但对于倍频系数 RCC_PLLMul_*,*的取值似乎只能是6以下,否则Virtual Terminal显示乱码。
在sys.c中设置(洋桃电子例程;野火似乎没把设置RCC频率程序单列出来)
/*设置PLL时钟源及倍频系数*/   
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5); //RCC_PLLMul_x(枚举2~16)是倍频值。当HSE=8MHZ,RCC_PLLMul_9时PLLCLK=72MHZ   
3、    双击proteus原理图中stm32元件,载入*.elf文件时,弹出如图2的窗口,频率必须设为8MHz* RCC_PLLMul_*,其中*<=6, 8MHz为stm32f103c6的外接晶振频率(proteus仿真库没有stm32f103c8)。



仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include "stm32f10x.h" //STM32头文件
  2. #include "sys.h"
  3. #include "delay.h"

  4. #include "usart.h"


  5. int main (void){//主程序
  6.         RCC_ClocksTypeDef     RCC_Clocks;
  7.         u8 a=7,b=8;
  8.         //初始化程序
  9.         RCC_Configuration(); //时钟设置
  10.         
  11.         
  12.   RCC_GetClocksFreq(&RCC_Clocks);

  13.         
  14.         USART1_Init(4800); //串口初始化(参数是波特率)

  15.         //主循环
  16.         while(1){

  17.                 /* 发送方法1 */
  18. //                USART_SendData(USART1 , 0x55); //发送单个数值
  19. //                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //检查发送中断标志位

  20.                 /* 发送方法2 */
  21. //                printf("STM32F103 "); //纯字符串发送数据到串口

  22. //                printf("STM32 %d %d ",a,b); //纯字符串和变量发送数据到串口,a符号变量
  23.                  
  24.                 /* 发送方法3 */
  25.                 USART1_printf("STM32 %d %d ",a,b);

  26.         delay_ms(1000); //延时
  27.         }
  28. }


  29. 【变量定义】
  30. u32     a; //定义32位无符号变量a
  31. u16     a; //定义16位无符号变量a
  32. u8     a; //定义8位无符号变量a
  33. vu32     a; //定义易变的32位无符号变量a
  34. vu16     a; //定义易变的 16位无符号变量a
  35. vu8     a; //定义易变的 8位无符号变量a
  36. uc32     a; //定义只读的32位无符号变量a
  37. uc16     a; //定义只读 的16位无符号变量a
  38. uc8     a; //定义只读 的8位无符号变量a

  39. #define ONE  1   //宏定义

  40. delay_us(1); //延时1微秒
  41. delay_ms(1); //延时1毫秒
  42. delay_s(1); //延时1秒

  43. */
复制代码

所有资料51hei提供下载:
7USART—串口通信.7z (888.46 KB, 下载次数: 673)


作者: maozheng110    时间: 2019-11-9 11:37
内容很新 很实用
作者: leehyoung    时间: 2019-11-18 13:30
感谢分享
作者: yubo2007    时间: 2020-1-12 12:14
感谢分享
作者: yubo2007    时间: 2020-1-12 12:15
感谢分享
作者: 888888888888899    时间: 2020-3-1 17:19
为什么Proteus里面STM32F103的晶振频率设置为40MHz,而不是8MHz,会不会设置错了
作者: Pee_32    时间: 2020-3-8 15:27
Proteus能不能仿真STM32F103C8T6
作者: bouna    时间: 2020-3-9 07:33
good code

作者: huodongjia    时间: 2020-3-10 15:23
大佬,为什么我用您的hex文件和仿真 必须把COMPIN的波特率设置为57600,MCU的晶振48MHZ才能正确输出啊,但是看代码里写的usart的初始化不是4800吗,而且PLL倍数那个选择的是5倍,不应该是40MHZ吗

作者: lium7    时间: 2020-3-18 18:24
想学习一下
作者: bouna    时间: 2020-3-19 07:30
thank you very much
作者: wliuxiaoxiaow    时间: 2020-4-11 16:37
Pee_32 发表于 2020-3-8 15:27
Proteus能不能仿真STM32F103C8T6

不能 最新版的都没有 ,有别的STM32F103
作者: xhao79    时间: 2020-4-15 15:11
非常好
作者: 风不能把光打败    时间: 2020-4-17 11:01
楼主,方便把源码发一下嘛,我按照你的程序创建工程运行之后显示不正确,直接用你的HEX文件能仿真出来,想看一下你是怎么配置的,谢谢!!
作者: lsf18    时间: 2020-4-20 11:13
您好方便发一下程序么   这个我程序设置波特率9600,但是在仿真中必须要设置主频48波特率57600才能正确接收到  有点蒙  想看看您的程序
作者: SuperForce    时间: 2020-4-21 08:33
感谢分享
作者: Blackmashiro    时间: 2020-4-25 15:19
仅在主频48MHZ,virtual的波特率设置为57600,才可以正常显示,而且分频数为5,6都不行。程序里的波特率,也不能写57600,我写的9600可以正常。很迷。。。
作者: cndeusa    时间: 2020-5-12 10:56
Proteus仿真串口时,Proteus的晶振频率要按SYSCLK的值设置
作者: 3133216898    时间: 2020-5-12 21:40
感谢分享
作者: ocno    时间: 2020-5-13 10:14
学习了
作者: 940512424    时间: 2020-5-14 10:44
能发下源代码吗
作者: 时间苍白了誓言    时间: 2020-5-14 22:26
这个。。程序。。哎

作者: 时间苍白了誓言    时间: 2020-5-14 22:27
只是零散的几个文件,还不如不发

作者: 轩邈    时间: 2020-5-18 10:35
感谢分享

作者: 波特率    时间: 2020-5-27 14:40
这要怎么设置,晕了,刚刚设置主频48波特率57600才能正确接收到(程序波特率为9600),现在又不行了
作者: 波特率    时间: 2020-5-27 14:50
lsf18 发表于 2020-4-20 11:13
您好方便发一下程序么   这个我程序设置波特率9600,但是在仿真中必须要设置主频48波特率57600才能正确接收 ...

你后面成功了吗?我也是程序设置的波特率为9600 ,和你的情况一样。但是代码重新编译一下就不可以使用了
作者: hht805656153    时间: 2020-6-20 14:10
感谢分享
作者: s1ls1ls1l    时间: 2020-8-2 11:11
huodongjia 发表于 2020-3-10 15:23
大佬,为什么我用您的hex文件和仿真 必须把COMPIN的波特率设置为57600,MCU的晶振48MHZ才能正确输出啊,但 ...

我和你一样,PROTUES设置波特率57600才行,程序里面9600,哎
作者: qwerfk    时间: 2023-5-14 22:36
不错,有思路了
作者: liming_nefu    时间: 2023-9-3 16:10
是不是锁相环没有工作呢?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1