历史上的今天
今天是:2025年02月10日(星期一)
2020年02月10日 | STM32F103之Timer2PWM输出
2020-02-10 来源:eefocus
一、简介
本文以STM32F103编程为例,介绍STM32F103Timer2 PWM输出。
二、实验平台
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM32F103CB
三、版权声明
四、实验前提
1、在进行本文步骤前,请先安装IAR Embedded Workbench 5.4版本;准备好STM32F103CB硬件平台。
五、基础知识
暂无
六、源码地址
暂无
七、关联文章
暂无
八、实验内容
1.初始化Timer2,初始化时需先开起相关时钟
void Hal_Init_Pwm(uint16 period,uint16 Prescaler)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /*开定时器2时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*GPIO时钟开启*/
/*引脚配置*/
GPIO_InitTypeDef GPIO_InitStructure; /*配置GPIO*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*复用输出*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*配置TIMER2*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /*配置TIMER2*/
TIM_DeInit(TIM2); /*初始化定时器2*/
TIM_TimeBaseStructure.TIM_Period = period; /*重装值 计数到最大为3600-1 然后从0开始*/
TIM_TimeBaseStructure.TIM_Prescaler = Prescaler; /*分频系数*/
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; /*时钟分割*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*向上计数*/
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*配置TIMER2PWM输出*/
TIM_OCInitTypeDef TIM_OCInitStructure; /*配置TIMER2PWM输出*/
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*PWM2模式输出*/
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /*比较输出使能*/
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /*输出极性高 输出高电平*/
/*通道1*/
// TIM_OCInitStructure.TIM_Pulse =40*36;
// TIM_OC1Init(TIM2, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道2*/
TIM_OCInitStructure.TIM_Pulse =0; /*设置占空比*/
TIM_OC2Init(TIM2, &TIM_OCInitStructure); /*初始化外设TIMx 通道*/
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);/*CH1预装载使能*/
/*通道3*/
// TIM_OCInitStructure.TIM_Pulse =90*36;
// TIM_OC3Init(TIM2, &TIM_OCInitStructure);
// TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道4*/
// TIM_OCInitStructure.TIM_Pulse =0*36;
// TIM_OC4Init(TIM2, &TIM_OCInitStructure);
// TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE); /*使能TIMx在ARR上的预装载寄存器*/
TIM_Cmd(TIM2, ENABLE); /*使能定时器2*/
}
2.编写主函数
void main(void)
{
Init_Clock(); /*初始化时钟*/
Hal_Init_Pwm(64000-1,0); /* F = PLL / (64000-1) */
TIM_SetCompare2(TIM2,50*640); /*输出占空比为50%*/
while(1);
}
史海拾趣
|
请教如下两个问题: 1. synplify不能综合状态机的“when others”状态:我用的是VHDL,编码风格中要求对case语句的使用要做到取值完全覆盖,即要加一个“when others”的判断(我想Verilog也一样吧,用default?),用c ...… 查看全部问答> |
|
小弟我最近在搞U-BOOT移植,但最后执行make后,提示arm-linux-gcc找不到, 我以为是环境变量的问题,结果用export $PATH命令看了一下,有这个目录, 但在最后却出现一个“not a valid identifier\",这个我想问一下是什么原因啊, 我的uboot目录 ...… 查看全部问答> |
|
最近调试s3c2440,中断这里一直困扰着我 开始是调flash的时候,使能R/B中断,程序一运行就跑飞了,开始不知道原因,改作查询等待模式。 现在调试外部中断的时候这个问题又出现了 单步执行结果显示,2440捕捉到这个外部中断了,但是就是不去运行 ...… 查看全部问答> |
|
我使用STM32F103VC的芯片跑UCOS。但是执行了如下的代码就是进入不了PendSV_Handler。用软件仿真还是可以的,但是烧到板上就不可以了。执行这段代码的时候BASEPRI = 0,PRIMASK = 0.这应该没有关中断吧。为什么就是进入不了 ...… 查看全部问答> |
|
我参加了本次的团购,打开包装看到板子后,我惊呆了,液晶屏和板子之间的连接线断开了一部分,挺好的板子怎么会出现这种情况呢?上个照片吧 [ 本帖最后由 yzl624358 于 2011-11-1 20:37 编辑 ]… 查看全部问答> |
|
这是我在网上看到的一篇帖子,作者是古木(胡斌)老师写的,作为一名在读学生,我也感到迷茫,我也为自己曾经的无所事事而感到无可奈何,也想在一念之间将所有的东西都学会,然后找到高薪工作,但往往是欲速则不达,古木老师的这篇文章是他经验的总 ...… 查看全部问答> |
|
我正在使用stm32_eth_lib固件库,我希望能将以太网接收到的数据通过USB转发到上位机(我只需要将以太网物理层接收到的一帧数据经过USB转发到上位机,不需要经过协议栈)。但是 找不到以太网接收到数据后的中断处理函数,以太网是数据是通过DMA通道传 ...… 查看全部问答> |




