找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21507|回复: 29
收起左侧

Proteus+stm32f103c6串口仿真程序及注意事项

  [复制链接]
ID:569027 发表于 2019-9-17 10:56 | 显示全部楼层 |阅读模式
在用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)。
0.png 0.png


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

单片机源程序如下:
  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, 下载次数: 660)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:693722 发表于 2020-3-1 17:19 | 显示全部楼层
为什么Proteus里面STM32F103的晶振频率设置为40MHz,而不是8MHz,会不会设置错了
回复

使用道具 举报

ID:522338 发表于 2020-3-10 15:23 | 显示全部楼层
大佬,为什么我用您的hex文件和仿真 必须把COMPIN的波特率设置为57600,MCU的晶振48MHZ才能正确输出啊,但是看代码里写的usart的初始化不是4800吗,而且PLL倍数那个选择的是5倍,不应该是40MHZ吗
回复

使用道具 举报

ID:711649 发表于 2020-4-17 11:01 | 显示全部楼层
楼主,方便把源码发一下嘛,我按照你的程序创建工程运行之后显示不正确,直接用你的HEX文件能仿真出来,想看一下你是怎么配置的,谢谢!!
回复

使用道具 举报

ID:233711 发表于 2019-11-9 11:37 | 显示全部楼层
内容很新 很实用
回复

使用道具 举报

ID:253856 发表于 2019-11-18 13:30 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:72576 发表于 2020-1-12 12:14 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:72576 发表于 2020-1-12 12:15 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:552592 发表于 2020-3-8 15:27 | 显示全部楼层
Proteus能不能仿真STM32F103C8T6
回复

使用道具 举报

ID:700459 发表于 2020-3-9 07:33 | 显示全部楼层
good code
回复

使用道具 举报

ID:710744 发表于 2020-3-18 18:24 | 显示全部楼层
想学习一下
回复

使用道具 举报

ID:700459 发表于 2020-3-19 07:30 | 显示全部楼层
thank you very much
回复

使用道具 举报

ID:292427 发表于 2020-4-11 16:37 | 显示全部楼层
Pee_32 发表于 2020-3-8 15:27
Proteus能不能仿真STM32F103C8T6

不能 最新版的都没有 ,有别的STM32F103
回复

使用道具 举报

ID:400821 发表于 2020-4-15 15:11 | 显示全部楼层
非常好
回复

使用道具 举报

ID:594374 发表于 2020-4-20 11:13 | 显示全部楼层
您好方便发一下程序么   这个我程序设置波特率9600,但是在仿真中必须要设置主频48波特率57600才能正确接收到  有点蒙  想看看您的程序
回复

使用道具 举报

ID:731693 发表于 2020-4-21 08:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:734107 发表于 2020-4-25 15:19 | 显示全部楼层
仅在主频48MHZ,virtual的波特率设置为57600,才可以正常显示,而且分频数为5,6都不行。程序里的波特率,也不能写57600,我写的9600可以正常。很迷。。。
回复

使用道具 举报

ID:483144 发表于 2020-5-12 10:56 | 显示全部楼层
Proteus仿真串口时,Proteus的晶振频率要按SYSCLK的值设置
回复

使用道具 举报

ID:750338 发表于 2020-5-12 21:40 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:256070 发表于 2020-5-13 10:14 | 显示全部楼层
学习了
回复

使用道具 举报

ID:750635 发表于 2020-5-14 10:44 | 显示全部楼层
能发下源代码吗
回复

使用道具 举报

ID:451629 发表于 2020-5-14 22:26 | 显示全部楼层
这个。。程序。。哎
回复

使用道具 举报

ID:451629 发表于 2020-5-14 22:27 | 显示全部楼层
只是零散的几个文件,还不如不发
回复

使用道具 举报

ID:748904 发表于 2020-5-18 10:35 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:762483 发表于 2020-5-27 14:40 | 显示全部楼层
这要怎么设置,晕了,刚刚设置主频48波特率57600才能正确接收到(程序波特率为9600),现在又不行了
回复

使用道具 举报

ID:762483 发表于 2020-5-27 14:50 | 显示全部楼层
lsf18 发表于 2020-4-20 11:13
您好方便发一下程序么   这个我程序设置波特率9600,但是在仿真中必须要设置主频48波特率57600才能正确接收 ...

你后面成功了吗?我也是程序设置的波特率为9600 ,和你的情况一样。但是代码重新编译一下就不可以使用了
回复

使用道具 举报

ID:435675 发表于 2020-6-20 14:10 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:810485 发表于 2020-8-2 11:11 | 显示全部楼层
huodongjia 发表于 2020-3-10 15:23
大佬,为什么我用您的hex文件和仿真 必须把COMPIN的波特率设置为57600,MCU的晶振48MHZ才能正确输出啊,但 ...

我和你一样,PROTUES设置波特率57600才行,程序里面9600,哎
回复

使用道具 举报

ID:1077229 发表于 2023-5-14 22:36 | 显示全部楼层
不错,有思路了
回复

使用道具 举报

ID:147329 发表于 2023-9-3 16:10 | 显示全部楼层
是不是锁相环没有工作呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表