Proteus8.9 仿真STM32407ZGT6系列007_定时器中断

发布者:PeacefulWarrior最新更新时间:2023-10-09 来源: elecfans关键字:Proteus8  仿真  定时器中断 手机看文章 扫描二维码
随时随地手机看文章

一,    打开文件(可以随文下载放置在文档中打开)。(如下图1所示)
 

图1

二,调整虚拟器件,另存工程文件。(如下图2,3,4所示)

 
图2

图3

图4

三,点击Source Code标签。(如下图5所示)

 
图5

四,编辑main.c,timer.c,timer.h, key.c,key.h, led.c,led.h 代码如Proteus8.9 仿真STM32407ZGT6系列001(如下图6所示)
 

图6

五,Main.c 代码:
/* Main.c file generated by New Project wizard
 * Author:   Ziegler Yin
 * Created:   周四 一月 16 2020
 * Processor: STM32F407ZGT6ZGT6
 * Compiler:  GCC for ARM
 */

#include "mfuncs.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "timer.h"

#define RT(A , B) (A> 300)?  (B= 0):  (B=1)

int main(void)
{
 u16 pwmval=0;   
 u8 dir=1;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
 delay_init(168);  //初始化延时函数
 uart_init(9600);//初始化串口波特率为115200
    LED_Init();
    KEY_Init();
 uprint("大家好!!!rn");
 uprint("大家来造呼吸机-----。rn"); 
 uprint("控制芯片STM32F407ZGT6_008_PWM仿真开始了。rn"); 
  LED0= LED1= LED2= 1;
  TIM4_PWM_Init(500-1,840-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz. 
  TIM_SetCompare1(TIM4, pwmval);
   while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
 {
  uprint("Arm运行时......rn");
  if(1==ReadKey(GPIOC, 0x0010)) {
   LED0= 1;
   uprint("占空比增加......rn");
   if(dir) pwmval+=10;
   RT(pwmval , dir);
  }if(1==ReadKey(GPIOC, 0x0020)) {
   LED1= 1;
   uprint("占空清零......rn");
   if(dir) pwmval= 0;
   RT(pwmval , dir);
  }if(1==ReadKey(GPIOC, 0x0040)) {
   LED2= 1;
   uprint("占空比减少......rn");
   if(dir) pwmval-=10;
   RT(pwmval , dir);
  }
  TIM_SetCompare1(TIM4, pwmval);
   delay_ms(100);
  LED0= LED1= LED2= 0;
 }
}
timer.c代码:
#include "mfuncs.h"
#include "timer.h"
#include "led.h"

void TIM4_PWM_Init(u32 arr,u32 psc)
{        
 //此部分需手动修改IO口设置
 
 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;
 
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   //TIM4时钟使能   
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);  //使能PORTB时钟 
 
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); //GPIOB6, 7, 8复用为定时器4 
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4); //GPIOB6, 7, 8复用为定时器4 
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM4); //GPIOB6, 7, 8复用为定时器4
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8;           //GPIOB6, 7, 8
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
 GPIO_Init(GPIOB, &GPIO_InitStructure);              //初始化PB
  
 TIM_TimeBaseStructure.TIM_Prescaler= psc;  //定时器分频
 TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseStructure.TIM_Period= arr/ 5;   //自动重装载值
 TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1;
 
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);//初始化定时器4
 
 //初始化TIM4 Channel1 PWM模式 
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
 TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM14

TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器
  
 TIM_TimeBaseStructure.TIM_Prescaler= psc;  //定时器分频
 TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseStructure.TIM_Period= arr/ 2;   //自动重装载值
 TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1;
 
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);//初始化定时器4
 
 //初始化TIM4 Channel1 PWM模式 
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
 TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1

TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器


 TIM_TimeBaseStructure.TIM_Prescaler= psc;  //定时器分频
 TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseStructure.TIM_Period= arr;   //自动重装载值
 TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1;
 
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);//初始化定时器14
 
 //初始化TIM4 Channel1 PWM模式 
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
 TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器


    TIM_ARRPreloadConfig(TIM4, ENABLE);  //ARPE使能
 
 TIM_Cmd(TIM4, ENABLE);  //使能TIM4
            

timer.h代码
#ifndef _TIMER_H
#define _TIMER_H

#include "sys.h"

void TIM4_PWM_Init(u32 arr,u32 psc);

#endif


key.c,key.h, led.c led.h之前的代码都可借鉴,不在多列,以后不再一一罗列,只列main.c 与相关功能的.c, .h代码。

六,点击构建工程按钮,编译工程。(如下图7所示)

 
图7

七,点击窗口左下方仿真按钮,可见红,黄,绿灯点亮后一会灭,仿真开始,按下KEY_ADD按钮,占空比增加;按下KEY_MINUS按钮,占空比减少;按下KEY_ZERO按钮,占空比清零。虚拟串口,示波器将的状态变化显示在屏。 (如下图8,9,10所示)

 
图8

 
图9

 
图10

八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示)
 

图11


关键字:Proteus8  仿真  定时器中断 引用地址:Proteus8.9 仿真STM32407ZGT6系列007_定时器中断

上一篇:如何做一部基于STM32F4的手持式游戏机
下一篇:应用笔记 | STM32L4R9 的QuadSPI Flash 通讯速率不理想

推荐阅读最新更新时间:2024-11-08 22:58

中兴Blade V9现身Geekbench:搭载骁龙450
   近日中兴Blade V9现身Geekbench,该机将在世界移动通信大会上推出,定位中端,将与摩托罗拉的Moto G6产品线直接竞争。   就跑分而言,中兴Blade V9搭载骁龙450处理器,在多核心测试中获得了3931分,单核心测试为772分。另外该机内置3GB的内存,此前消息还显示,中兴Blade V9据传也提供2GB和4GB RAM的版本,分别搭载16GB和64GB的内部存储,而3GB RAM将搭载32GB的存储容量。传闻该设备采用5.7英寸大屏幕,18:9宽高比,2160 x 1080p FullHD +分辨率。   传言该机还会配备双摄像头,配备3200mAh电池,其售价应该在200美元左右。
[手机便携]
ARM9的存储控制器
实验的目的: 把程序本身从Steppingstone复制到SDRAM处,然后跳转到SDRAM中执行 实验的源程序: @************************************************************************* @ File:head.S @ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @************************************************************************* .equ MEM_CTL_BASE, 0x48000000 .equ SDRAM_BASE
[单片机]
西门子收购计算化学软件公司 Culgi ,增强 Xcelerator仿真能力
西门子日前签署了对计算化学软件公司 Culgi 的收购协议。Culgi 此前专注于过程工业的多尺度仿真,加入西门子数字化工业软件后,Culgi 的解决方案将进一步增强西门子 Xcelerator™ 的仿真能力,其量子和分子化学模型将与 Simcenter™ STAR-CCM+™ 软件的连续方法无缝衔接。这一独特的工程工作流程可以帮助材料和过程工业大幅降低成本,加速创新,进而提高产品和流程变革的潜力。 西门子数字化工业软件仿真与测试解决方案高级副总裁 Jan Leuridan 表示:“软材料工程领域的创新始于量子和分子级别,将 Culgi 技术纳入 Simcenter 产品组合后,过程工程师将获得一个集微尺度、中尺度和宏观尺度模
[工业控制]
西门子收购计算化学软件公司 Culgi ,增强 Xcelerator<font color='red'>仿真</font>能力
联发科技单芯片MT1389S支持WMV-9和HDMI-DVD
联发科技(MTK)日前对外发布了其DVD单芯片新品MT1389S。该芯片支持微软最新视频压缩技术WMV-9(windows media video 9),包括SPLL转换成MPML、APL0和APL1。这也是全球第一款支持 WMV9的DVD单芯片。 联发科技(MTK)数字家庭事业部副总裁朱尚祖表示:“随着互联网上的视频应用越来越丰富,像微软Windows Media 9系列这样的先进视频编解码器将越来越受欢迎。联发科技在DVD领域一向致力于为用户提供最先进的应用功能和最好的娱乐体验,藉由支持 WMV9, MT1389S将更能满足互联网视频应用的更高压缩比的需求。” 联发科技的 MT1389S是一个功能强大的DVD SOC芯片,
[焦点新闻]
基于ARM9的一种新型馈线自动化终端设计
引言 随着智能电网研究的兴起和城乡电网结构的不断改进,对配电网自动化提出了更高的要求。具有选择性、能快速切除故障、具备故障自愈能力的馈线终端(Feeder Terminal Unit,FTU)成为研究热点。参考文献中基于数字处理器DSP,参考文献中应用ARM与DSP分别开发设计了馈线自动化终端装置。 上述参考文献采用不同的处理器,使用不同的技术,设计了配电网馈线终端,但所设计装置存在着成本高、配置灵活性低和安装布线困难等问题。ARM微处理器具有较强的处理能力,运算速度快、性能高、功耗低、成本低、体积小,是馈线终端核心控制器件的首选。物联网技术是新一代信息技术的重要部分,具有广阔的应用前景,可以实现馈线终端数据无线通信。新型能源太阳
[单片机]
基于ARM<font color='red'>9</font>的一种新型馈线自动化终端设计
魅族Note9真机谍照曝光
此前魅族科技已经预告,将在3月6日下午2点30分于北京举办‘魅族Note9新品发布会’。并且表示3 月 6 日,等空投。现在有数码博主曝光了几张魅族Note9的真机谍照。魅族Note9采用水滴屏,后置双摄,后置指纹识别。   根据IT之家此前的消息,魅族Note 9将搭载4800万像素和骁龙最新的6150处理器(据称是骁龙675),该处理器拥有超过17万的跑分,配备4000mAh电池,运行基于安卓9.0的Flyme。
[手机便携]
魅族Note<font color='red'>9</font>真机谍照曝光
三星Galaxy S9发布日期确定 明年MWC大会见!
作为年度重磅旗舰,三星Galaxy S9从还未发布之时就受到了广泛的关注,而这款新机的配置信息与发布时间也成为用户最关心的重点。 三星Galaxy S9   据韩媒报道,三星将于明年年初的MWC大会上正式发布Galaxy S9和Galaxy S9+,具体时间为2月25日,首发国家为韩国,韩国三大运营商将于明年3月9日上架销售。   配置方面,三星Galaxy S9拥有一块5.8英寸的显示屏,配备4GB RAM,采用单摄像头设计;Galaxy S9+则采用6.2英寸显示屏,配备6GB RAM,双摄像头设计,两款机型均搭载Exynos 9810处理器。
[手机便携]
PMMA塑料车窗升降运动偏差仿真与试验分析
近年来,PMMA 塑料以其优良的特性被汽车工业看重,是较为理想并有发展前景的轻质材料。PMMA 俗称亚克力或有机玻璃,密度为1.19g/cm3,约为无机玻璃的1/2,具有良好的光学性能和耐候性能,是一种可回收的热塑性工程材料。PMMA 目前主要应用于尾灯车灯、内外饰、三角窗,应用于车门侧窗还比较少。相比固定的三角窗, 车门侧窗作为移动窗,对玻璃的升降运动性能提出了更高的要求,而玻璃升降运动偏差是侧窗玻璃关注的主要性能之一。运动偏差较大可能会导致升降缓慢甚至产生明显的噪声异响,同时可能还会影响车门的防雨防风及隔声性能。其中,玻璃型面的设计和升降导轨的确定是影响运动偏差的两个关键因素。 国内外有很多研究人员对双曲面玻璃及其升降导轨进行
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved