用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6

一,目前得到的 proteus8.9版本软件能够支持的cortex-m4固件库项目,只能到达stm32f401ve (如下图1所示)。
(图1)
作为st公司cortex-m4更为广泛应用的f407,f429系列芯片;现在的proteus8.9版本软件还没有固件库支持,不能对f407,f429系列芯片进行仿真实验。
但stm32f401ve的固件库基于cortex-m4,笔者就想利用proteus8.9版本软件现有的stm32f401ve的固件库,对f407,f429系列芯片通过proteus vsm studio进行仿真实验应用。
首先生成stm32f401ve的固件库项目,选取stm32f401ve的芯片和其他组件(如下图2所示)。
(图2)
接着搭建一个timer—>pwm项目,即通过首先生成stm32f401ve的通用定时器timer1生成三组不同频率的和不同占空比的方波实验(如下图3所示)。
(图3)
用proteus vsm studio编写代码,编译,仿真。main.c代码(如下图4,5所示)。
(图4)
(图5)
其他led.c代码:
#include led.h
void led_init(void)
{
gpio_inittypedef gpio_initstructure;
rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiob,enable);//使能gpiof时钟
//gpiof9,f10初始化设置
gpio_initstructure.gpio_pin= gpio_pin_6| gpio_pin_12| gpio_pin_13;//led对应引脚
gpio_initstructure.gpio_mode= gpio_mode_out;//普通输出模式
gpio_initstructure.gpio_otype= gpio_otype_pp;//推挽输出
gpio_initstructure.gpio_speed= gpio_speed_100mhz;//100mhz
gpio_initstructure.gpio_pupd= gpio_pupd_up;//上拉
gpio_init(gpioa,&gpio_initstructure);//初始化
led0=1;
gpio_resetbits(gpioa,gpio_pin_12);
gpio_resetbits(gpioa,gpio_pin_13);
}
led.h代码:
#ifndef __led_h
#define __led_h
#include sys.h
//led端口定义
#define led0 paout(6) // ds0
//#define led1 pbout(8) //ds1
void led_init(void);//初始化
#endif
key.c代码:
#include key.h
#include delay.h
void key_init(void)
{
gpio_inittypedef gpio_initstructure;
rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiob,enable);//使能gpioa,gpioe时钟
gpio_initstructure.gpio_pin= gpio_pin_14| gpio_pin_15; //key0 对应引脚
gpio_initstructure.gpio_mode= gpio_mode_in;//普通输入模式
gpio_initstructure.gpio_speed= gpio_speed_100mhz;//100m
gpio_initstructure.gpio_pupd= gpio_pupd_down ;//下拉
gpio_init(gpioa,&gpio_initstructure);//初始化gpioe4
}
key.h代码:
#ifndef __key_h
#define __key_h
#include sys.h
#define key0 pain(14) //pa14
#define key1 pain(15) //pa15
void key_init(void); //io初始化
#endif
timer.c代码:
#include timer.h
#include led.h
#include usart.h
extern u8 ov_frame;
extern volatile u16 jpeg_data_len;
void tim1_mode_config(void)
{
tim_timebaseinittypedef tim_timebasestructure;
tim_ocinittypedef tim_ocinitstructure;
u16 ccr1_val =700;
tim_timebasestructure.tim_period = 2800;
tim_timebasestructure.tim_prescaler = 0;
tim_timebasestructure.tim_clockdivision = tim_ckd_div1 ;
tim_timebasestructure.tim_countermode = tim_countermode_up;
tim_timebaseinit(tim1, &tim_timebasestructure);
tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm1;
tim_ocinitstructure.tim_outputstate = tim_outputstate_enable;
tim_ocinitstructure.tim_outputnstate = tim_outputnstate_enable;
//tim_ocinitstructure.tim_pulse = ccr1_val;
//tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;
//tim_oc1init(tim1, &tim_ocinitstructure);
//tim_oc1preloadconfig(tim1, tim_ocpreload_enable);
tim_ocinitstructure.tim_pulse = ccr1_val;
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;
tim_oc1init(tim1, &tim_ocinitstructure);
tim_oc1preloadconfig(tim1, tim_ocpreload_enable);
tim_ocinitstructure.tim_pulse = ccr1_val*2;
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;
tim_oc2init(tim1, &tim_ocinitstructure);
tim_oc2preloadconfig(tim1, tim_ocpreload_enable);
tim_ocinitstructure.tim_pulse = ccr1_val;
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;
tim_oc3init(tim1, &tim_ocinitstructure);
tim_oc3preloadconfig(tim1, tim_ocpreload_enable);
tim_ocinitstructure.tim_pulse = ccr1_val*3;
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;
tim_oc4init(tim1, &tim_ocinitstructure);
tim_oc4preloadconfig(tim1, tim_ocpreload_enable);
tim_arrpreloadconfig(tim1,enable);
tim_ctrlpwmoutputs(tim1,enable);
tim_cmd(tim1,enable);
}
void tim1_gpio_config(void)
{
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_apb2periph_tim1, enable);
rcc_apb2periphclockcmd(rcc_ahb1periph_gpioa, enable);
gpio_initstructure.gpio_pin = gpio_pin_8| gpio_pin_9| gpio_pin_10| gpio_pin_11;
gpio_initstructure.gpio_mode= gpio_mode_af;
gpio_initstructure.gpio_otype= gpio_otype_pp;//推挽输出
gpio_initstructure.gpio_speed =gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
gpio_pinafconfig(gpioa,gpio_pinsource8,gpio_af_tim1);
gpio_pinafconfig(gpioa,gpio_pinsource9,gpio_af_tim1);
gpio_pinafconfig(gpioa,gpio_pinsource10,gpio_af_tim1);
gpio_pinafconfig(gpioa,gpio_pinsource11,gpio_af_tim1);
}
void tim1_gpio_resetconfig(void)
{
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_ahb1periph_gpioa, enable);
gpio_initstructure.gpio_pin = gpio_pin_8;
gpio_initstructure.gpio_mode= gpio_mode_af;
gpio_initstructure.gpio_otype= gpio_otype_pp;//推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
gpio_pinafconfig(gpioa,gpio_pinsource8,gpio_af_tim1);
}
void tim1_gpio_unsetconfig(void)
{
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_ahb1periph_gpioa, enable);
gpio_initstructure.gpio_pin = gpio_pin_8| gpio_pin_11;
gpio_initstructure.gpio_mode= gpio_mode_out;
gpio_initstructure.gpio_otype= gpio_otype_pp;//推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
gpio_resetbits(gpioa,gpio_pin_8);
gpio_resetbits(gpioa,gpio_pin_11);
}
void tim1_pwm_init(void)
{
tim1_gpio_config();
tim1_mode_config();
}
timer.h代码:
#ifndef _timer_h
#define _timer_h
#include sys.h
void tim1_pwm_init(void);
void tim1_mode_config(void);
void tim1_gpio_config(void);
void tim1_gpio_resetconfig(void);
void tim1_gpio_unsetconfig(void);
//void tim3_int_init(u16 arr,u16 psc);
#endif
用proteus vsm studio编译已完成的代码(如下图6所示)。
(图6)
用proteus仿真stm32f401ve的timeràpwm项目(如下图7,8所示)。
(图7)
(图8)
按下key0按钮led0红灯亮灯(如下图9所示)。
(图9)
二,根据原理图制作stm32f407zgt6的proteus仿真元件(如下图10,11所示)。
(图10)
(图11)
由于是在使用stm32f401ve的固件库与stm32f407zgt6的引脚数和标号不同,需要进行调整(如下图12所示)。
(图12)
为了避免与proteus以后推出stm32f407zgt6的固件库冲突,将制作的元件命名为stm32mf407zgt6。由于是基于stm32f401ve的固件库以及mdf,只支持100pins。与真的stm32f407zgt6 相对照,还少了些引脚,和一些功能。,但基础功能仿真是可以满足的(如下图13所示)。
(图13)
用proteus仿真stm32mf407zgt6的timeràpwm项目的编程,编译,仿真操作以及显示结果一致。(如下图14所示)。
(图14)
三,
根据原理图制作stm32f429igt6的proteus仿真元件(如下图15,16所示)。
(图15)
(图16)
由于是在使用stm32f401ve的固件库与stm32f429igt6的引脚数和标号不同,需要进行调整(如下图17所示)。
(图17)
为了避免与proteus以后推出stm32f29igt6的固件库冲突,将制作的元件命名为stm32mf29igt6。由于是基于stm32f401ve的固件库以及mdf,只支持100pins。与真的stm32f29igt6 相对照,还少了些引脚,和一些功能。,但基础功能仿真是可以满足的(如下图18所示)。
(图18)
用proteus仿真stm32mf429igt6的timeràpwm项目的编程,编译,仿真操作以及显示结果一致。(如下图19所示)。
(图19)
需要进一步了解,请加入qq群:976235464

nRF24L01+RF模块教程
索尼随身听缔造个人移动音乐的小精灵
基于USB控制器设计的Windows音量控制器
手机、VR双驱动_推升宏达电第1季整体营运
四家台商被指是协助华为关键企业或进入美方黑名单
用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6
日置电机:深耕中国测试测量市场
荣耀V9评测:华为荣耀V9想要快,就现在!
专访王宏玉:深入了解旷视当前在智慧物流领域的具体规划及远景未来
村田宣布扩产!将在法国增产这类元器件!
RK3588核心板规格说明
SMT贴片的工艺流程有哪些?
中国最有潜力半导体最上游EDA软件龙头
应用案例 I 人体及医用红外热像仪检测校准系统方案
禾多科技致力于实现高阶自动驾驶系统百万台级交付
开关电源的输出电压纹波抑制设计
用于过流保护的电子保险电路设计
AI技术与5G技术将助力机器人的发展
去年的PCB专用材料排行榜你知道有哪些吗?
2019年智能家居行业发展既面临多种挑战 也面临着全新机遇