查看: 1073|回复: 11

[资料] 小白贴 Proteus 8.6仿真STM32F103C6分享续

  [复制链接]

主题

好友

1万

积分

翰林

  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-4-21 09:46:55 |显示全部楼层
    小白贴 proteus 8.8仿真STM32F103C6分享续之串口
    本人小白,实际中二青年,利用proteus8仿真STM32,在实验后遇到的部分问题及解决分享给各位想尝试的朋友,欢迎交流。如有侵权,请管理告知删帖。

    1、准备工作
    a)器件选择:STM32F103C6
    b)软件版本:
          Proteus V8.8
          STM32CubeMX  V5.3.0
          MDK5 V5.26
          SSCOM V5.13.1
          Virtual Serial Port Driver V9.0(版本不一致也行但需要注意能模拟出串口。)
          [GCC(9.2.1  20191025)](可选)


    c)附件压缩包解压后目录简要说明:
    注意,删除的文件包含编译过程中生成的中间文件,以缩减附件大小。
    Example_Test:解压后的文件夹;
    Code:包含由STM32CubeMX生成的MDK工程和一个GCC工程代码,但修改过。其中GCC工程使用的是MDK的工程的HDL库,MDK的工程删除了一些用不到的东西,以及UserDrivers两个工程都使用的一些小文件;
    Proteus:Proteus生成的实验电路工程文件;
    GCC:STM32CubeMX生成的工程,GCC下的Makefile文件,仅做添加UserDriver下C源文件及路径的修改;
    MDK:STM32CubeMX生成的工程以区分MDK,GCC;
    UserDrivers:两个工程共用的LEDprintf串口重定向文件;

    2、步骤
    a)使用Proteus构建简易实验电路


    b)使用STM32CubeMX生成工程代码
    正常使用就好,唯一要注意的是如图红色方框,里面的数字就是在之后步骤中使用的系统时钟频率。为啥配置为8MHz,其他数值也行。72兆我乐意,但电脑卡成PPT,用Proteus的警告来说:Simulation is not running in real time due to excessive CPU load。(因超出CPU负荷,仿真无法实时运行。) 电脑硬件配置好的我觉得可以跑满速72MHz。注意添加串口,记下系统时钟频率和波特率,没记也没关系,一会去代码里找找也是可以的。


    c)使用虚拟串口(Virtual Serial Port Driver)生成一对相互连接虚拟串口,并记下串口号,没记也没关系,一会去设备管理器里找,如图所示:


    d)回到Proteus配置STM32F103C6系统时钟频率和COMPIM
    刚才第二步第三步没做笔记的小童鞋,可能要根据步骤查看代码和设备管理器了。
    1)配置STM32F103C6系统时钟频率为所配置的数值


    2)配置通信组件COMPIM



    e)打开工程添加相应代码并编译
    仅需要注意的是为了方便添加如下串口重定向的代码


    d)打开并设置SSCOM、在Proteus中加载.hex文件运行即可


    3、问题与解决
    a)Proteus中STM32F103C6时钟问题
    细心的朋友可能已经看出来了,我在步骤b)中配置时钟树,配置了外部晶振为时钟源,但电路中有没有添加时钟电路,但是实验结果还出来了。我个人认为,Proteus中Crystal frequency需要的只是我们配置的系统时钟频率,用以提供一个代码或者指令执行的周期(用词可能不准,看的童鞋辛苦一下。),并不是真正意义的晶振频率。时钟设置高了,电脑配置低了,你会发现你其实也是可以跑赢STM32的,如图为配置为72MHz下的STM32中运行程序的时间,但实际中过了挺长的时间(大概72MHz下红框所示一秒,我大概过了24秒半):



    b)重定向代码与之前使用的用部分不一样
    是的,经个人验证若使用原来的:

    #IFdef __GNUC__
       #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
       #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    #endif

    在GCC编译下,在串口软件上是没有输出的。因为GCC和MDK在底层使用的不一样。网上说的。需改为步骤e)所示。


    总结
    距离上一次发帖已经一年多,这次补充一个,万一有用呢。虽然技术层面上来说还是那么白……


    游客,如果您要查看本帖隐藏内容请回复

















    回复

    使用道具 举报

    主题

    好友

    7879

    积分

    状元

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 1024 天

    连续签到: 9 天

    [LV.10]以坛为家III

    发表于 2020-4-22 09:30:39 |显示全部楼层
    STM32都是在开发板上做一直没用过Proteus仿真。我的Proteus 8.6仿真STM32一直有问题
    回复

    使用道具 举报

    主题

    好友

    907

    积分

    举人

  • TA的每日心情
    开心
    昨天 08:12
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2020-4-22 09:30:39 |显示全部楼层
    谢谢分享
    回复

    使用道具 举报

    主题

    好友

    466

    积分

    秀才

  • TA的每日心情
    开心
    2020-5-19 10:25
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-5-7 09:32:40 |显示全部楼层
    学习了
    回复

    使用道具 举报

    主题

    好友

    6

    积分

    白丁

    该用户从未签到

    发表于 2020-5-18 09:41:29 |显示全部楼层
    谢谢楼主
    回复

    使用道具 举报

    主题

    好友

    5001

    积分

    状元

  • TA的每日心情
    奋斗
    昨天 19:54
  • 签到天数: 377 天

    连续签到: 21 天

    [LV.9]以坛为家II

    发表于 2020-5-25 08:53:35 |显示全部楼层
    Proteus仿真
    回复

    使用道具 举报

    主题

    好友

    6

    积分

    白丁

    该用户从未签到

    发表于 2020-6-12 16:33:37 |显示全部楼层
    大佬
    有项目源码吗
    回复

    使用道具 举报

    主题

    好友

    26

    积分

    白丁

    该用户从未签到

    发表于 2020-6-15 10:20:11 |显示全部楼层
    :)顶一个
    回复

    使用道具 举报

    主题

    好友

    1万

    积分

    翰林

  • TA的每日心情
    擦汗
    昨天 09:09
  • 签到天数: 1279 天

    连续签到: 26 天

    [LV.10]以坛为家III

    发表于 2020-6-17 17:06:53 |显示全部楼层
    学习学习,感谢分享
    回复

    使用道具 举报

    主题

    好友

    6

    积分

    白丁

    该用户从未签到

    发表于 2020-6-24 17:12:40 |显示全部楼层
    学习学习学习
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /5 下一条



    手机版|电路城

    GMT+8, 2020-7-11 03:48 , Processed in 0.096143 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部