stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

文章目录

一、前言

前阵子用codesys的软PLC方案来仿真测试了PLC,以此研究了一阵子PLC和profinet,感触颇深,这种仿真软件还真是挺好用的,硬件软件化真的很方便。最近stm32上有个使用 ADAU1361进行录放音的研究,正好找到了仿真stm32的方案:Proteus,这个时候我发现这个不就是我们大学仿真C51的时候用的软件吗,时间太长不搞这块的开发感觉都快忘的差不多了,实际软件开发做多了感觉这类电子控制类的开发也变得有意思了,PLC、C51搞的有点返祖的感觉了。目前Proteus仿真stm32有一些型号还没有,但是作为基础研究学习是够了。此外,正好借着这个机会早点把stm32这块的一些基础开发总结完,也拖了不少时间了,后续有时间再进阶总结一下使用freertos+stm32cubemx相关的内容。

二、资料收集

Proteus安装:https://blog.csdn.net/weixin_44543463/article/details/116203188

Proteus使用资料:http://www.tup.tsinghua.edu.cn/upload/books/yz/051322-01.pdf

Proteus仿真stm32:https://blog.csdn.net/mistake11a/article/details/109555825

STM32CubeMX也再熟悉一下:https://www.st.com/resource/zh/user_manual/um1718-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf

三、实际案例-点灯

1、Proteus8安装

参考对应博客直接下载安装即可,太过于详细了。

百度网盘链接:https://pan.baidu.com/s/1EHGewnvjcnEpPbXnR1qLIA

提取码: pr89

  • (1)右键压缩包,进行解压。进入解压的文件夹,右键p8.9.sp0.exe文件,使用管理员身份打开。
  • 这里可能有些机器会先弹出安装Visual C++的一个界面,一定要安装这些勾选的组件,否则后续安装会出现问题。
  • (2)莫得选择,next
  • (3)I accept,然后next
  • (4)选择使用本地的激活证书license key。
  • (5)继续next
  • (6)这里会打开一个激活证书管理界面,点击左下角【Browse For Key File】,找到刚才解压出来的文件夹,里面解压后的【Proteus 8.9】文件夹中的【Crack】文件夹下的【Licence.lxk】文件,点击【打开】。


  • (7)点击 【install】,在弹出的对话框询问是否继续,选择 【是】,安装完成后点击【Close】。



  • (8)都不用勾选,直接【next】
  • (9)这里选择安装方式,选择【Custom】,然后选择要安装的路径,注意:两个路径一定要一样,否则后期软件使用时会闪退。


  • (10)这里不用管,默认【Next】就可以。
  • (11)继续【Next】
  • (12)点击【Install】开始安装,安装耗时一分钟左右。


  • (13) 点击【Close】,不要运行Proteus
  • (14)再次进入安装包解压后的【Proteus 8.9】文件夹中的【Crack】文件夹,选择所有文件【复制】。
  • (15) 在桌面找到【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】
  • (16) 在空白处【右键-粘贴】,将刚才那三个文件复制过来。
  • (17) 右键粘贴后的【pp8.9】选择【以管理员身份运行】。(运行完成后不会弹出任何对话窗,运行一下就可以),建议关闭各种安全管家之后再运行。
  • (18) 再次打开解压后的【Proteus 8.9】文件夹,鼠标右击【Translations】选择【复制】。
  • (19)再次右键桌面【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】
  • (20)点击路径中的【Proteus】文件夹,回到上一级。
  • (21)在空白处【右键-粘贴】,将刚才复制的Translation文件夹粘过来,可能会有27/28个同名文件,点击【替换目标中的文件】。
  • (22)进入【C:\Program Files (x86)\Labcenter Electronics】目录下,有一个【Proteus 8 Professional】文件夹,进入此文件夹,【全选-复制这两个文件夹】。
  • (23)回到Proteus的安装路径(同19、20步),【右键粘贴,替换目标文件】
  • (24)至此,安装完成!

2、Proteus创建stm32F013C6项目并添加外围LED电路

目前我们一般使用的最小板大多为F103C8T6,Proteus上没有C8的,但是在论坛上找到C6的引脚基本和C8是一样的(http://www.51hei.com/bbs/dpj-185185-1.html),只是Flash和RAM小一点,从下图看F103C4和F103CB也是可以作为简单demo来匹配C8的:

创建工程很简单,因为是中文版所以基本上应该都能看懂:

  • (1)新建工程
  • (2)选择默认模板
  • (3)默认不创建PCB布版设计
  • (4)创建固件,选择相关STM32F103C6的固件,编译器选择MDK带的即可,也可以自己配置arm gcc
  • (5)然后下一步并完成即可:
  • (6)添加元器件

添加LED-RED:

添加电阻:

  • (7)然后简单布线一下,这里需要相关的电子知识,一般LED需要的电流大小,设置的电阻大小、电压值计算、串并联等等,否则灯就亮不起来,或者实际硬件设计时导致烧掉元器件等问题:

3、STM32CubeMX配置F103C6引脚生成MDK工程

接着我们需要开发程序控制STM32F103C6的PA1-PA8输出电平来使得LED亮灭,这里我们锻炼使用STM32CubeMX来配置相关引脚,关于STM32CubeMX的安装之前已经有一些接触,这个还是比较推荐的,确实会省不少事。

  • (1)进入MCU选择界面:
  • (2)左上角搜索STM32F103C6,之后选择一个型号即可,我们选择默认的第一个,之后选择开始项目:
  • (3)配置相关引脚(这里设置PA1-PA8为GPIO输出)
  • (4)时钟配置和Tools我们这里先不需要,在项目管理这里设置工程路径和工具链IDE即可(MDK这里选择MDK-ARM即可):

最后点击右上角的GENERATE CODE生成代码即可,生成完成直接打开工程就进入MDK软件页了。

4、MDK编译生成hex文件

  • 1、点击魔法棒进入配置页面
  • 2、在配置页面的Output这里配置生成HEX文件
  • 3、写完代码最后进行编译或者重编译生成hex文件

这里我们控制GPIO的拉高拉低来闪烁LED灯,代码如下(主要是main.c的相关位置添加循环延时控制寄存器,也可以按部就班的写GPIO引脚的拉高拉低):

c 复制代码
...
void delay_ms(uint32_t ms)
{
	uint32_t i_cnt,j_cnt;
	for(i_cnt=0; i_cnt < 3000; i_cnt++);
	for(j_cnt=0; j_cnt < ms; j_cnt++);
	
}
uint32_t i;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
    GPIOA->BSRR = 0xff;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      for(i = 0; i < 8; i++)
	  {
		delay_ms(99000);
		GPIOA->BRR = (1 << i);
		  
		delay_ms(99000);
		GPIOA->BSRR= (1 << i);
	  }
	  for(i = 0; i < 8; i++)
	  {
		  delay_ms(99000);
		  GPIOA->BRR = 0x000000ff;
		  
		  delay_ms(99000);
		  GPIOA->BSRR = 0x000000ff;
	  }
  }
  /* USER CODE END 3 */
}
...

生成的hex文件位置(MDK项目目录下):

5、Protens导入hex文件进行仿真

Proteus工程中双击元器件导入hex文件:

然后调试->开始仿真即可:

四、最后

Proteus确实好用,有的时候比开发板甚至面包板都好用,用于学习研究再好不过了,也避免了电路设计错误烧掉板子等问题,使用过程中也算是简单锻炼了设计电路的能力,但是有的时候相关的元器件型号缺失就显得比较鸡肋,从大学那时候学习的记忆看似乎更适合去仿真C51系列的单片机作为教学之类的。(比如我这里需要ADAU1361和STM32F411,但是相关元器件导入要登录之类的,甚至需要自己去设计电路图导入导出,这个时候就比较麻烦了,这对于一些新手就比较劝退,折腾不少时间,最后实际项目可能还有差异,所以有能力入手开发板和面包板的还是比较推荐这种方式,如果实在手头有限但有时间折腾的可以啃一下Proteus,还是可以省不少钱的;我后续会根据自己手头有的元器件来选择使用proteus还是实际元器件操作进行总结,我们也不必拘泥于这些外物,学到知识才是关键。)

相关推荐
蜡笔小新星12 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
VirtuousLiu25 分钟前
LM74912-Q1用作电源开关
单片机·嵌入式硬件·ti·电源设计·lm74912·电源开关
打地基的小白26 分钟前
软件I2C-基于江科大源码进行的原理解析和改造升级
stm32·单片机·嵌入式硬件·通信模式·i2c
攸攸太上26 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
Echo_cy_38 分钟前
STM32 DMA+AD多通道
stm32·单片机·嵌入式硬件
朴人42 分钟前
【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】
stm32·单片机·嵌入式硬件·foc
追梦少年时1 小时前
STM32中断——外部中断
stm32·单片机·嵌入式硬件
Ljubim.te1 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
bai_lan_ya1 小时前
stm32定时器中断和外部中断
stm32·单片机·嵌入式硬件
yngsqq1 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#