RT-thread+STM32F401+Proteus仿真[第一篇 串口仿真]

发表在 实战入门学习营2020-2-10 11:09 [复制链接] 4 191

本帖最后由 liqijian101 于 2020-2-10 11:13 编辑
2 X* m9 n, {9 n* U: {2 L0 h, t3 i; u) Q  |- m$ K
[RT-Thread+STM32F401+Proteus仿真【第一篇 串口仿真】
1       说明
此教程仅给没有硬件的条件下使用,若你具备硬件的条件,推荐使用硬件学习RT-thread。使用Proteus仿真你会遇到更多的问题。
2       Proteus软件准备
目前(2020/2/10Proteus v8.8v8.9已经可以仿真STM32F401系列,需要安装相应版本的软件。
本文安装Proteus v8.9 SP2版本,下载网上其他版本,可能存在license证书破解日期到期问题。
软件下载地址(已经破解,直接安装即可):
3       Proteus仿真搭建
搭建仿真电路如下图所示(SD卡部分,本节内容不需要),使用了虚拟串口,需要安装虚拟串口软件Virtual Serial Port Driver Pro、和串口调试助手软件。
1) 配置虚拟串口波特率为115200
2) 实际仿真时发现只能使用HSI时钟作为SYSCLKCube时钟配置如图所示
Proteus程序文件: attach]13549[/attach]
图片1.png
Proteus 仿真电路图
图片2.png
Cube时钟配置图
4       RT-thread串口程序(使用RT-thread Sdudio v1.1)
1) RT-Thread建立STM32F401VE的过程参考官方教程:
初始生成的工程文件,已经可以实现串口功能。
2) 系统时钟设置:
经过参考Proteus自带的串口仿真示例,以及尝试多种时钟配置方式,发现Proteus中只支持HSI作为系统时钟,可以使用Cube软件生成代码,并替换RT-Threadboard.cSystemClock_Config(void)函数,最终SystemClock_Config(void)如下:
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/ ?3 `9 e1 P4 i- o- E
    /** Configure the main internal regulator output voltage
    */
    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
    /** Initializes the CPU, AHB and APB busses clocks
    */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
      Error_Handler();
    }
    /** Initializes the CPU, AHB and APB busses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
7 L2 d9 K7 j2 C8 }4 m
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
    {
      Error_Handler();
    }
}
; r" s3 H1 W. q+ t9 O. P
% {8 f! E  N/ G9 t

RT-thread STM32F401 Proteus仿真[第一篇 串口仿真].docx

162.36 KB, 下载次数: 42

New Project.pdsprj

21.28 KB, 下载次数: 51

使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-2-10 11:57:23 | 显示全部楼层
这个能观察到现象嘛,如shell打印
使用道具 举报 回复
发表于 2020-2-11 13:36:21 | 显示全部楼层
andychen 发表于 2020-2-10 11:57
- O. H. v; V1 n+ J. X/ s这个能观察到现象嘛,如shell打印

& Y  l+ U; G" \5 y/ V可以,和用硬件没区别
使用道具 举报 回复
发表于 2020-2-12 09:58:36 | 显示全部楼层
这个还是不错的方案。
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
我按照你的帖子做了一下实验,有几个小问题,不过已经解决;总结了下问题,按你的帖子又发了新的贴子,里面已经署名并贴出本帖地址。本着学习分享目的,并无他意,希望大神多出相关教程,让我们这些小白学习!
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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