【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真

这篇具有很好参考价值的文章主要介绍了【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  博主最近进行单片机的仿真,本篇文章主要利用了STM32CubeMX、Keil和Proteus三个软件,为后期的硬件打下基础。文章主要目的是学习软件的使用和单片机的仿真。

  本文是我在学习proteus软件和STM32CubeMX过程当中的心得和学习笔记,在学习时已经有C, C++的基础。文章附上了学习的代码,仅供大家参考。如果有问题,有错误欢迎大家留言。

  此外,博主还有另外几篇文章,分别关于Python基础知识Python的具体应用C语言指针结构体的难点C++入门和进阶知识点C++高阶知识点,大家点击即可翻阅。

一、软件介绍和下载安装

1.1 STM32CubeMX介绍

  从15-16年开始,意法半导体公司(ST)逐渐停止了对SPL标准外设库的更新和维护,转向了HAL和LL库。对于STM32CubeMX的学习主要是学习HAL库,HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性,HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。

  • SPL :Standard Peripheral Library 标准外设库
  • HAL:Hardware Abstraction Layer 硬件抽象层库
  • LL:Low-layer 底层库
      STM32CubeMX是一个图形化的软件配置工具,在这种软件中,用户可以通过图形化的操作,完成初始化代码工程。生成的工程是一个可以正常编译的完整工程,使用的时候只需要添加上用户的代码即可。接下来我们创建第一个仿真项目,点亮LED灯

参考了别的博主的博客和B站视频。

1.2 Proteus介绍

Proteus软件是英国Lab Center Electronics公司出版的电子设计自动化(Electronic design automation,EDA)工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。虽然国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
——百度百科

  proteus功能很强大,它是一个合成了PCB设计、电路仿真、虚拟模型仿真为一体的电子设计自动化软件。具体的软件安装可以参考别的博主的文章,这里不在细述,Proteus8.9 下载与安装教程。

二、创建第一个项目

2.1 STM32CubeMX生成代码

  第一步,新建一个项目,在搜索栏中输入本次要使用的仿真硬件,这里是STM32F103C8,属于比较常见的一种单片机。然后,双击搜索结果中出现的项目。第二步将Pinout & Configuration -> system core -> SYS -> Debug 改为Serial Wire, Pinout & Configuration -> system core -> RCC -> High Speed Clock(HSE)和Low Speed Clock(LSE)全部改为Crystal/Ceramic Resonator。最后在图形界面将GPIO口的PA5改为output(双击)。

matlab生成单片机代码,单片机,proteus,嵌入式硬件

  第三步,将Clock Configuration中的HCLK时钟改为72MHz(最高时钟频率),如图所示。

matlab生成单片机代码,单片机,proteus,嵌入式硬件

  第四步,Project Maneger中将项目名称修改为LED,修改保存路径,修改设备型号和版本。最后在Code Generator中将生成.c和.h文件的选项打钩,点击生成代码,就可以在路径底下生成一个工程代码。到这一步为止,我们就生成了.c和.h文件,但是它是不能在单片机上运行的,要生成单片机能够运行的.hex文件还需要keil的帮助。

matlab生成单片机代码,单片机,proteus,嵌入式硬件

2.2 keil5 生成可执行文件

  第五步,在生成的项目文件当中,找到MDK-ARM文件底下的.uvprojx文件,使用keil打开,这里博主使用的keil5。如图所示,输入如下代码,因为小灯闪烁的频率非常快,肉眼观察不到,因此我们加上延时函数。编译运行,生成.hex文件,HEX文件是一种能够烧写到单片机中,被单片机执行的文件格式。代码部分到此就完毕了。这里需要注意的是,我们用户的代码最好写在两个USER CODE注释的中间,这样如果需要用STM32CubeMX改写代码时就不会改变我们写的代码,而写到其他地方去的代码会被覆盖

		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
		HAL_Delay(200);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
		HAL_Delay(200);

matlab生成单片机代码,单片机,proteus,嵌入式硬件

2.3 Proteus 搭建简单电路

  第六步,在Proteus中,点击新建项目,步骤参考自手把手教你上手Proteus。项目建好之后点击P,可以查找元器件。博主的Proteus版本太低,找不到C8,就用C6替代了,效果一样的。我们依次找到LED,电阻。

matlab生成单片机代码,单片机,proteus,嵌入式硬件
matlab生成单片机代码,单片机,proteus,嵌入式硬件

  电源和地在这个图标中可以找到。

matlab生成单片机代码,单片机,proteus,嵌入式硬件

  最终电路图如图所示,点击运行就小灯就闪烁起来了,至此第一个项目就完成了。

matlab生成单片机代码,单片机,proteus,嵌入式硬件

  如果出现下面的错误,就是电网布置错误了,Design -> Configure Power Rails -> Power Rails -> Name, 在GND中将VDDA和VSSA移除,VDDA和VSSA添加到VCC/VDD中,点击OK,重新运行即可

matlab生成单片机代码,单片机,proteus,嵌入式硬件
matlab生成单片机代码,单片机,proteus,嵌入式硬件

三、按键开发

  如图所示,我们打开在STM32CubeMX创建的第一个项目(以.ioc结尾的文件),将管脚改成如下所示,其中PB7、PB8为输出,PC13、PB5、PB1为输入,GPIO设置为pull-up。这个主要用来区分GPIO口用于输入还是输出如果是输出,那么选择no-pull-up and no-pull-down,如果是input,那么需要看具体应用的默认输入值是0还是1,如果默认是输入0,则最好配置为pull down,反之则配置为pull up。这里我们根据实际电路设置,我们的仿真电路默认输入为高电平,为1, 因此设置为pull-up。
matlab生成单片机代码,单片机,proteus,嵌入式硬件

  在keil中修改代码,可以使用宏定义简化代码。按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平。单片机通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

  按键的输入引脚有低电平产生不一定是按键按下引起的,有可能是干扰信号。因此,按键需要进行防抖操作处理。首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。然后我们在主函数循环当中调用Scan_Keys()函数。注意以下代码都要写在用户代码注释之间。

// 宏定义,简化代码
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)		
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)
void Scan_Keys()
{
	// 默认为高电平1,如果输入为0,则检测到一次按键输入
    if(KEY2 == GPIO_PIN_RESET)		
    {
        HAL_Delay(5);		// 防抖,按钮不按下,排除电源不稳等等误判因素
        if(KEY2 == GPIO_PIN_RESET)
        {
						// 确认按下之后,立刻翻转直至按钮松开
            HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);		
            while(KEY2 == GPIO_PIN_RESET);	
        }
    }
    if(KEY3 == RESET)
    {
        HAL_Delay(5);
        if(KEY3 == RESET)
        {
						// 按下之后,直至按钮松开,再进行翻转操作
            while(KEY3 == RESET);
            HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
        }
    }
    if(KEY4 == 0)		// RESET可以用0代替
    {
        HAL_Delay(5);
        if(KEY4 == 0)
        {
						// 对两个GPIO口同时操作
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9|GPIO_PIN_8,GPIO_PIN_RESET);
            while(KEY2 == 0);
        }
    }
}

四、中断和定时器开发

持续更新~

end文章来源地址https://www.toymoban.com/news/detail-594997.html

到了这里,关于【STM32仿真】STM32CubeMX+Keil+Proteus单片机仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32单片机的电子钟(Proteus仿真+程序)

    本设计由STM32单片机+液晶1602+按键+RTC时钟组成。 1、采用STM32F103最小系统板。 2、利用STM32内部自带RTC时钟提供时钟信号 3、液晶1602实时显示年月日、时分秒、星期等信息。 4、三个按键可实现年月日、时分秒的设定。 由于在仿真中运行CPU占用率较高,运行时,时间会变慢许多

    2024年02月12日
    浏览(46)
  • 【Proteus仿真】【STM32单片机】汽车倒车报警系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能: 系统运行后,LCD1602显示DS18B20采集温度和超声波检测距离。 可通过K1键对报警距离阈值设置,可通过K2、K3键对阈值加减调节, 若检测

    2024年02月07日
    浏览(59)
  • 【Proteus仿真】【STM32单片机】火灾监测报警系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、按键模块、LED和蜂鸣器、继电器直流电机模块、DS18B20温度传感器、MQ2烟雾传感器等。 主要功能: 系统运行后,LCD1602显示温度和MQ2烟雾传感器检测的温度及烟雾浓度;当检测温度或烟雾浓度高于设置的温度或烟雾

    2024年02月03日
    浏览(46)
  • 【Proteus仿真】【STM32单片机】智能窗帘控制系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、按键模块、HC05蓝牙、DHT11温湿度、PCF8591 ADC模块、光线传感器、28BYJ48步进电机等。 主要功能: 系统运行后,LCD1602显示温湿度和光线强度值和系统模式状态。 系统模式以自动模式运行,当按下K4键切换为手动模式

    2023年04月24日
    浏览(30)
  • 基于STM32单片机的密码锁(Proteus仿真+程序+报告)

    3-基于STM32单片机的密码锁 功能描述如下:          由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块; 1、采用STM32F103为主控芯片。 2、通过4*4矩阵键盘实现密码输入、功能键等排列如下 1     2    3     删除 4     5    6     修改密码 7   

    2024年02月08日
    浏览(46)
  • 【Proteus仿真】【STM32单片机】交通灯控制系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用数码管、按键、交通信号灯模块等。 系统运行后,交通灯系统开始运行,数码管显示初始时间,默认南北绿灯5S,东西红灯8S,绿灯过后南北黄灯3秒;然后切换东西绿灯5S,南北红灯8S,绿灯过后南北黄灯3秒;如此循环。 可使用

    2024年02月11日
    浏览(35)
  • 【Proteus仿真】【STM32单片机】蔬菜大棚温湿度控制系统设计

    本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、DHT11温湿度、蜂鸣器、按键、LED、继电器、电机模块等。 主要功能: 系统运行后,LCD1602显示DHT11温湿度采集值, 当按下K3键进入阈值设置,第一次进入温度上限, 第二次进入温度下限,第三次进入湿度上限, 第四次

    2023年04月08日
    浏览(32)
  • 基于STM32单片机的温度报警器(数码管)(Proteus仿真+程序)

            本设计由STM32F103单片机最小系统+DS18B20温度传感器+数码管显示模块+声光报警模块+独立按键组成。 1、主控制器是STM32F103单片机 2、DS18B20温度传感器测量温度 3、数码管显示温度值,精度0.1摄氏度 4、三个按键可设置温度上限、下限报警值,温度超过上限、或者温度低

    2024年02月07日
    浏览(46)
  • 92-基于stm32单片机智能家居智能窗帘控制系统Proteus仿真+程序源码

    一:功能介绍 1、采用stm32单片机+LCD1602+DHT11温湿度传感器+DS1302传感器+光敏电阻+按键+电机,制作一个智能窗帘控制系统; 2、通过按键设置手动和自动模式,并且手动模式下可以通过按键控制窗帘打开和关闭; 3、自动模式下,可以通过光照强度来自动控制窗帘,当光照过低

    2024年02月03日
    浏览(50)
  • 基于STM32单片机的直流电机PWM调速(数码管显示)(Proteus仿真+程序)

          由 STM32单片机+数码管显示模块+键盘模块+L298N电机驱动模块+直流电机 1、采用STM32F103单片机为主控制器 2、四个按键,分别为启动/暂停、方向切换、加速、减速功能 3、数码管显示PWM占空比和电机转动方向(0正转,1反转) 注意:proteus8.11版本才能打开   24、基于STM32单

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包