基于STM32处理器 定时器比较输出测试程序
2012-12-23 22:42
423 查看
这是建立keil的工程的信息
这里给出最关键的三个文件
main.c文件
Tim.c文件
stm32f10x_it.c文件
这里给出最关键的三个文件
main.c文件
#include "stm32f10x.h" #include "stm32f10x_tim.h" #include "misc.h" unsigned int CCR3_Val=5000; unsigned int CCR4_Val=10000; extern void time_ini(void); void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE , ENABLE); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn ; //配置定时器中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { RCC_Configuration(); //系统时钟设置及外设时钟使能 NVIC_Configuration(); //中断源配置 time_ini(); //定时器3的初始化 while(1); }
Tim.c文件
#include "stm32f10x_tim.h" #include "stm32f10x_gpio.h" #include <stm32f10x.h> void time_ini(void); extern unsigned int CCR3_Val; extern unsigned int CCR4_Val; TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure; TIM_OCInitTypeDef TIM3_OCInitStructure; TIM_BDTRInitTypeDef TIM3_BDTRInitStructure; void time_ini(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //定时器3 时钟使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //PB5复用为TIM3的通道2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE); TIM3_TimeBaseStructure.TIM_Prescaler = 7200; //预分频器TIM3_PSC=63 TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数模式 TIM3_CR1[4]=0 TIM3_TimeBaseStructure.TIM_Period =0xffff; //自动重装载寄存器TIM3_APR TIM3_TimeBaseStructure.TIM_ClockDivision = 0x0; //时钟分频因子 TIM3_CR1[9:8]=00 TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseStructure); //写TIM3各寄存器参数 TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle ; //TIM3_CCMR1[14:12]=011 翻转当TIM3_CCR2=TIM3_CNT时,翻转OC2REF的电平 TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性 低电平有效 TIM3_CCER[5]=1; TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输入/捕获2输出允许 OC2信号输出到对应的输出引脚PB5 TIM3_OCInitStructure.TIM_Pulse =CCR3_Val; //若CC1通道配置为输出:CCR2是装入当前捕获/比较2 TIM3_CCR2寄存器的值(预装载值)。 TIM_OC3Init(TIM3, &TIM3_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable); TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输入/捕获2输出允许 OC2信号输出到对应的输出引脚PB5 TIM3_OCInitStructure.TIM_Pulse =CCR4_Val; //若CC1通道配置为输出:CCR2是装入当前捕获/比较2 TIM3_CCR2寄存器的值(预装载值)。 TIM_OC4Init(TIM3, &TIM3_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable); //TIM3_CCMR1[1]=0 禁止TIM3_CCR2寄存器的预装载功能,可随时写入TIM3_CCR2 TIM_Cmd(TIM3,ENABLE); //启动定时器3 TIM3_CR1[0]=1; TIM_ITConfig(TIM3,TIM_IT_CC3|TIM_IT_CC4,ENABLE); //TIM3_DIER[2]=1 允许捕获/比较2中断 }
stm32f10x_it.c文件
#include "stm32f10x.h" #include "stm32f10x_tim.h" unsigned int capture1=0; extern unsigned int CCR3_Val; extern unsigned int CCR4_Val; extern TIM_OCInitTypeDef TIM3_OCInitStructure; void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET) //判断状态寄存器 TIM3_SR[2] 是否发生了捕获/比较2 中断 { TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); //软件清除状态寄存器 TIM3_SR[2] 捕获/比较2 中断中断标志 capture1 = TIM_GetCapture3(TIM3); //获取TIM3_CCR2的预装值 TIM_SetCompare3(TIM3, capture1+ CCR3_Val); //和CCR2_Val累加后装入TIM3_CCR2 这是为了配合计数器值的递增。以在下一次作出比较。 } if (TIM_GetITStatus(TIM3, TIM_IT_CC4) != RESET) //判断状态寄存器 TIM3_SR[2] 是否发生了捕获/比较2 中断 { TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); //软件清除状态寄存器 TIM3_SR[2] 捕获/比较2 中断中断标志 capture1 = TIM_GetCapture4(TIM3); //获取TIM3_CCR2的预装值 TIM_SetCompare4(TIM3, capture1+ CCR4_Val); //和CCR2_Val累加后装入TIM3_CCR2 这是为了配合计数器值的递增。以在下一次作出比较。 } }
相关文章推荐
- 基于LMS8962的跑马灯教学程序——定时器、串口及GPIO的使用
- 基于Qt编写TCP通讯程序测试程序之超级详细教程
- 基于Qt4.7的ADC测试程序
- 基于jdk在windows 终端编译java 程序时输出中文时出现乱码情况
- 基于CPPUNIT测试框架开发Android平台的测试程序
- (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
- 基于webrtc的gips 语音引擎库及测试程序(源代码下载地址:http://download.csdn.net/detail/dotphoenix/3674515)
- 基于QT和opencv的摄像头(本地图片)读取并输出程序
- qt简单的hello world测试程序终端无输出问题
- 4. avr 定时器/计数器1 --TC1 --CTC模式输出PWM (比较匹配发生时清除计数器模式(即CTC模式))
- 编写一个程序,将两个字符串s1和s2比较,如果s1 > s2,输出一个正数;s1 = s2,输出0,;s1 < s2输出一个负数。不要使用strcmp函数。
- USB Camera 采集图像预览测试程序(基于linux3.9.7 QT210)
- stm32的定时器输入捕获与输出比较
- ARMulator下定时器中断测试程序
- 5. avr定时器/计数器1 --TC1 --快速PWM输出 (比较输出--快速PWM模式)
- STM32之通用定时器输出比较模式
- RC522 读卡器和写卡器 读写测试程序----基于cc2530开发板
- ios 真机测试与发布详细流程,基于最新的开发者网站,ios7,xcode5(有截图的哦)[[[第二部分程序的发布]]]
- 一个基于epoll的服务器压力测试的小程序
- 基于nghttp2的apns HTTP2 C++ 测试程序