下面以stm32的TIM2作为实例一步步配置成为定时器:
1:对定时器的基本配置
TIM_TimeBaseStructure.TIM_Period = 65535; //设置自动装载寄存器
TIM_TimeBaseStructure.TIM_Prescaler = 100; //分频计数
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //选择向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE); //是能定时器
2:始能定时器的中断:
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
注意:
以上函数中的TIM_IT_Updata根据要是能的中断具体配置
3:在开启时钟里一定要打开TIM2的时钟,函数表达式如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
4:中断向量函数的编写:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM //如果程序在ram中调试那么定义中断向量表在Ram中否则在Flash中
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
5:中断函数的编写:
当有TIM2的无论哪个中断触发中断发生那么就会进入这个函数
TIM2_IRQHandler(void)
所以这个更新事件的中断判断要依靠以下语句:
if (TIM_GetITStatus(TIM2, TIM_IT_Update) = SET)
按照以上步骤配置可以顺利进行定时器的基本定时应用
关键字:stm32 TIM2 定时器
引用地址:
以stm32的TIM2作为实例一步步配置成为定时器
推荐阅读最新更新时间:2024-03-16 16:09
基于STM32的智能电机保护器设计
0 引言 电机是工业生产领域中最主要的驱动源,如何有效地监控电机的运行状态,保护电机回路,提高电机的运行时间,减少电机故障,对工厂整体电网的运行十分关键。 电动机保护装置有很多种,目前使用得比较普遍的还是基于金属片机械式的热继电器,它结构简单,在保护电动机过载方面具有反时限特性。但它的保护功能少,无断相保护,对电机发生通风不畅、扫膛、堵转、长期过载、频繁启动等故障也不能起保护作用。此外,热继电器还存在重复性能差、大电流过载或短路故障后不能再次使用、调整误差大、易受环境温度影响而误动或拒动、功耗大、耗材多、性能指标落后等缺陷。 为响应国家节能减排的要求,采用基于微控制器的电子式电机保护器替代现有热继电器,具有广大的市场。
[单片机]
stm32中程序内存的理解和一些问题的解决
一个小的项目,在测试时间和产品量稍微大一些之后,出现了一些莫名其妙的非逻辑错误的Bug(最头疼的是不能每次都能复制出来)。经过修改后,最近一个月的测试都没有出现。本人在这里得到了原子哥和其他朋友的很多帮助,也把自己的一些经验分享给各位,也欢迎大家指正。 1. 程序偶尔会出现一些Bug,经过output串口信息发现一些堆栈的临时变量被莫名其妙的修改。 stm32103rbt6的内存是20K,算比较小了,看到程序出错的那个函数申请了很多零时变量,也需要访问很多全局变量。猜想是内存被其他操作更改所致。 解决ram被使用过多的一个方法是尽量少用全局变量,能用const就用一定用const变量,因为这样会放在flash,而不是ram. 我的
[单片机]
STM32局部变量的数组最大能到多少?
当在一个函数中声明一个较大的局部数组变量时,程序可以编译通过,但运行时,老是进入hardfaulthandler,导致出现改问题的原因可能是栈溢出。因为局部变量是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小,会产生溢出。 解决这种问题的方法: 方法1:启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。将启动文件下的堆栈改大 Stack_Size EQU 0x00000400 。 Stack Size,一般小工程0X400足够,大工程才设置0X1000就够用,所以默认无需设置太大。 方法2:用静态数组代替普通局部数组。 方法3:数组过大,栈溢出了,有可能覆盖了其他全局变量的值
[单片机]
STM32 GPIO使用超强总结
STM32 GPIO使用超强总结 STM32GPIO使用 操作步骤: 1. 使能GPIO对应的外设时钟 例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); 2. 声明一个GPIO_InitStructure结构体 例如: GPIO_InitTypeDef GPIO_InitStructure; 3. 选择待设置的GPIO管脚 例如://选择待设置的GPIO第7、8、9管脚位 ,中间加“|”符号 GPIO_InitStruc
[单片机]
stm32之spi之NSS管脚信号
NSS管脚及我们熟知的片选信号,作为主设备NSS管脚为高电平,从设备NSS管脚为低电平。当NSS管脚为低电平时,该spi设备被选中,可以和主设备进行通信。在stm32中,每个spi控制器的NSS信号引脚都具有两种功能,即输入和输出。所谓的输入就是NSS管脚的信号给自己。所谓的输出就是将NSS的信号送出去,给从机。 NSS管脚的输出和输入在spi控制器中有专门的寄存器控制位控制其进行切换,而这个寄存器就是spi_cr2。在这个寄存器中其中有一位为ssoe,当SSOE位为1时且相应的spi处于主模式下那么NSS就输出低电平。所有与之相连的设备NSS管脚接收到的就都是低电平。因此被选作为从设备。 对于NSS的输入,又分为软件输入和硬件输
[单片机]
STM32的DAC输出驱动电压
目的 项目中的模块对输出电压的改变来控制功率、所以考虑用stm32内部的DAC来输出电压作为驱动。 源代码 #include dac.h void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPI
[单片机]
STM32 | 两块STM32之间的SPI主从通信实例
一、整体框图及说明 这里使用 STM32F429IGT6 作为主机,STM32F103ZET6 作为从机,都配置为全双工。本例要实现的功能就是主、从机之间的数据互传。 主机往从机发送的数据为: 从机往主机发送的数据为: 二、关键代码 主机关键代码: 从机关键代码: 可见,主机与从机的代码大多都一样。只是从机多了一步启动传输的操作,这一步很关键,少了这一步传输就不正常。这是为了制造主机发送的同时也要接收到数据的条件。这一点参考手册里也有相关说明: 此处,要营造这样的条件,必须先启动从机,然后再启动主机。只有保证主机发送的同时有接收到数据,才能保证其时序的正常,否则可能会产生数据错位,或者会产生多余数据
[单片机]
基于STM32的小说阅读器
1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡 2.实现功能 1.SD卡设备检测,文件系统移植,用户存储小说和字库文件; 2.字库信息加载检测,自动完成字库信息加载与更新。本次采用GBK字库,字体大小有16*16、24*24、32*32三个字库; 3.触摸屏校准,上电检测触摸屏校准信息;手动进入触摸屏校准模式 4.小说文件索引,小说文本切换; 5.小说翻页,字体大小选择,颜色选择,返回主目录; 3.示例效果 SD卡检测和触摸屏校准 字库检测与更新 目录和小说显示界面 颜色切换 字体选择 4.软件设计 1.SD卡字库更新加
[单片机]