基于STM32F429的定时器中断点亮LED的设计

电子时代,硬件在突飞猛进的发展,频率不断上升,目前的stm32系列,cortex m系列,cortex-m4的频率已经为:180mhz了,基本上与之前的arm7/9频率差不多了,还有cortex-m7,频率更高,出现了bga封装与sdram ddr等。看来处理器越来越大众化了,物联网上的电子设备联网,也越来越普及了,硬件成本不断降低是大势所趋,因此,作为一个电子设计人员,还是要不断的学习掌握更多的技术知识与基础,从而不会被社会很快淘汰。
最近买了一个现成的stm32f429 discovery 的开发板,想尝试一下较大点的嵌入式操作系统如rtems的移植与应用。因为有了stm32f103/107的基础,熟悉了硬件与固件库,stm32f429其实很容易入手。下面就先定时器中断点个led试下吧,主要是要组织好工程目录。
我是根据之前一直使用stm32f103的工程目录改了一下,使用stm32f4xx的最新固件库v1.6.1,至于为何不去直接操作寄存器,我想,虽然自己是硬件出身,搞寄存器更深入的了解处理器,但是,毕竟寄存器过多,有了库,可以封装一下,这样更可以快速的上手。如果需要查看寄存器,也是可以查的。用固件库可以少一些错误,毕竟我们是做应用的,首先要学会使用cpu来实现我们要的功能。
工程目录如下:这里使用最新的keil mdk v5.17版本的,stm32f4xx的器件库等还需要进一步下载。这里使用的是自带的st-link下载程序,当然使用jlink也是可以的。
stm32f429的系统定时器,原来是系统时钟180mhz的8分频,这个可以看一下stm32f4xx的参考手册,里面时钟rcc部分的框架介绍。我这里为了定时为1s,因此计算了一下。
以下为tim2.c的主程序。tim2.h 只是函数声明。
/********************(c)copyright2016**************************
*文件名:tim2.c
*描述:定时器timer2测试例程
*实验平台:stm32f429zit6
*库版本:v1.6.1
*
*编写日期:2016-05-02
*修改日期:
*作者:
****************************************************************************/
#include“tim2.h”
/*
*函数名:tim2_nvic_configuration
*描述:tim2中断优先级配置
*输入:无
*输出:无
*/
voidtim2_nvic_configuration(void)
{
nvic_inittypedefnvic_initstructure;
nvic_prioritygroupconfig(nvic_prioritygroup_4);
nvic_initstructure.nvic_irqchannel=tim2_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=3;
nvic_initstructure.nvic_irqchannelsubpriority=0;
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_init(&nvic_initstructure);
}
/*tim_period--1000tim_prescaler--(22500-1)--》中断周期为
((1/180000000)*8)*22500*1000=1s1秒定时器*/
voidtim2_configuration(void)
{
tim_timebaseinittypedeftim_timebasestructure;
rcc_apb1periphclockcmd(rcc_apb1periph_tim2,enable);
tim_deinit(tim2);
tim_timebasestructure.tim_period=1000;/*自动重装载寄存器周期的值(计数值)*/
/*累计tim_period个频率后产生一个更新或者中断*/
tim_timebasestructure.tim_prescaler=(22500-1);/*时钟预分频数(180m/8)/22500*/
tim_timebasestructure.tim_clockdivision=tim_ckd_div1;/*采样分频*/
tim_timebasestructure.tim_countermode=tim_countermode_up;/*向上计数模式*/
tim_timebaseinit(tim2,&tim_timebasestructure);
tim_clearflag(tim2,tim_flag_update);/*清除溢出中断标志*/
tim_itconfig(tim2,tim_it_update,enable);
tim_cmd(tim2,enable);/*开启时钟*/
//rcc_apb1periphclockcmd(rcc_apb1periph_tim2,disable);/*先关闭等待使用*/
}
/*
*函数名:tim2_config
*描述:tim2配置
*输入:无
*输出:无
*/
voidtim2_config(void)
{
tim2_configuration();
tim2_nvic_configuration();
}
/*******************(c)copyright2016*endoffile************/
以下为:led.c的文件。
/********************(c)copyright2014***************************
*文件名:led.c
*描述:led应用函数库
*实验平台:
*硬件连接:-----------------------
*|pg14-led1(run)|
*-----------------------
*库版本:st3.5.0
*编写日期:2014-11-04
*修改日期:
*作者:
****************************************************************************/
#include“led.h”
/*
*函数名:led_gpio_config
*描述:配置led用到的i/o口
*输入:无
*输出:无
*/
voidled_gpio_config(void)
{
/*定义一个gpio_inittypedef类型的结构体*/
gpio_inittypedefgpio_initstructure;
/*开启led1的gpiox的外设时钟*/
rcc_ahb1periphclockcmd(rcc_led1,enable);
/*选择要控制的led1gpiox引脚*/
gpio_initstructure.gpio_pin=gpio_pin_led1;
/*设置引脚模式为通用推挽输出*/
gpio_initstructure.gpio_mode=gpio_mode_out;
/*设置引脚速率为50mhz*/
gpio_initstructure.gpio_speed=gpio_fast_speed;
/*设置为推挽输出模式*/
gpio_initstructure.gpio_otype=gpio_otype_pp;
/*设置为上拉*/
gpio_initstructure.gpio_pupd=gpio_pupd_up;
/*调用库函数,初始化led1 的gpiox*/

智能防倒装水表的原理及设计
联通混改宣布将收尾,子公司成“新贵”
Nuance引进AI技术 提高放射师的生产力
抢先三星 华为将推首款开孔屏下摄像头全屏手机
大功率开关电源的EMC测试分析及正确选择EMI滤波器
基于STM32F429的定时器中断点亮LED的设计
面筋测定仪是什么,它的操作方法的介绍
一文解析云计算、SDN、虚拟化三者关系
高通推出骁龙865和骁龙765芯片,推动5G在2020年成为主流
小米9透明尊享版正式发布 号称全球首批量产的12GB内存手机
电子芯闻早报:没有骁龙815,小米Note/M9笑了
ddr4 3200和3600差别大吗
智能网联汽车的网络安全简述
如何解决电动汽车的续航难题?
这些主流的VR设备芯片方案,您都了解吗?
无人机有望实现在现实环境中自由穿行
超激烈!今年小米6/三星S8/HTC11/OPPO Find9这4款骁龙835+6GB的“机皇”之争
受控望远镜聚焦器的制作教程
将安全认证COTS的优势提升到系统级别
有迹象表明,苹果频繁举办发布会有助于公司盈利