历史上的今天
今天是:2024年09月16日(星期一)
2018年09月16日 | STM32 使用TIM2_CH1(PA15) 输出10K PWM信号
2018-09-16 来源:eechina
PA15-> TIM2 Remap CH1
1.apb_init()
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
2.gpio_init()
#define PWM_GPIO_IDX 8 //PA15
#define PWM_GRP GPIOA
#define PWM_PIN GPIO_Pin_15
#define PWM_MODE GPIO_Mode_AF_PP
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //disable JTAG
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); //TIM2 Remap CH1->PA15
3.pwm_init()
/*
72M / 10K = 720
period = 720-1 = 719
10分频: prescaler = 10-1 = 9
*/
#define LF_PERIOD 719 //周期
#define LF_PRESCALER 9 //分频
#define LF_PULSE 360 //占空比
void lf_init(void){
TIM_DeInit(TIM2);//将外设 TIMx 寄存器重设为缺省值
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = LF_PERIOD;//设置了在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler = LF_PRESCALER;//设置了用来作为 TIM1 时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;// 设置了时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择了计数器模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//根据 TIM_TimeBaseInitStruct 中指定的参数初始化 TIMx 的时间基数单位
TIM_OCInitTypeDef TIM_OCInitStructure;
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//选择输出比较状态
TIM_OCInitStructure.TIM_Pulse = LF_PULSE;//设置了待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性
TIM_OC1Init(TIM2, &TIM_OCInitStructure);//根据 TIM1_OCInitStruct 中指定的参数初始化 TIM1 通道 1
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能或者失能 TIMx 在 CCR1 上的预装载寄存器
TIM_ARRPreloadConfig(TIM2, ENABLE);//使能或者失能 TIMx 在 ARR 上的预装载寄存器
TIM_Cmd(TIM2, ENABLE);//使能或者失能 TIMx 外设
}
/* -----------------------------------------------------------------------
//对PWM的频率占空比解析
TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:
The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counter
clock at 24 MHz the Prescaler is computed as following:
- Prescaler = (TIM3CLK / TIM3 counter clock) - 1
SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density
and Connectivity line devices and to 24 MHz for Low-Density Value line and
Medium-Density Value line devices
The TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)
= 24 MHz / 666 = 36 KHz
TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%
TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%
TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%
TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%
uint16_t CCR1_Val = 333;
uint16_t CCR2_Val = 249;
uint16_t CCR3_Val = 166;
uint16_t CCR4_Val = 83;
----------------------------------------------------------------------- */
//以下为解决停止pwm信号后偶发出现高电平 2018-08-11
void PwmControl(BOOL bCon){
if(bCon){
TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_Active);
TIM_Cmd(TIM2, ENABLE);
}else{
TIM_Cmd(TIM2, DISABLE);
TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_InActive); //设置为非活动状态,低电平
}
}
上一篇:基于stm32的测速实现
史海拾趣
|
发明器,让人们专门搞发明的设备小编记得有互联网投资皇帝之称的孙正义先生在年轻时就曾经应用了一个有趣的发明器来赞助自己搞创新,它的原理是可以将很多风马牛不相及的东西自由排列组合在一起,使你产生新的想法解决人们新的需求。成果依附这个发 ...… 查看全部问答> |
|
首先,我是新手,没有接触过网卡驱动程序开发,仅看过windows上一个中间层的驱动代码。 我有些问题: ndis仅仅是windows上的东西吗? windows上开发一个驱动程序必须按照ndis吗? 网卡制造商如果仅有wi ...… 查看全部问答> |
|
随着亮度和能效的提升,延长使用寿命已经为促进基于高亮度发光二极管(HB-LED)的固态照明设计快速发展的主要因素之一。然而,并非所有HB-LED在这些方面都旗鼓相当,制造商应用静电放电(ESD)保护的方式可能是影响HB-LED现场使用寿命的一个至关键 ...… 查看全部问答> |
|
香水城,再请教你2个问题,cosmicc的环境st72324 问题1:I2Cms 是定义的全局变量,I2Cms 在1毫秒定时器里累加,现在的问题 I2Cms = 0; while(I2Cms<=10) { }这个while根 ...… 查看全部问答> |
|
评估板原先还好好的,就先前调触摸按键拆了充放电的电阻,有个脚的3.3M还没焊接回去。这段时间一直用板子的5V供电。刚刚想再看看这块板子,就出现这种情况,STVD的help里也找不到相关信息额。 STLINK是没问题的,因为我还可以用它debug。 评 ...… 查看全部问答> |
|
通过减少寄存器间的逻辑延时来提高工作频率,或通过流水线设计来优化数据处理时的数据通路来满足高速环境下FPGA或CPLD中的状态机设计要求。本文给出了采用这些技术的高速环境状态机设计的规范及分析方法和优化方法,并给出了相应的示例。 为了 ...… 查看全部问答> |




