一、简介
本文以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);
}
上一篇:STM32F103之IAR调试配置
下一篇:STM32F103之IAR添加scanf
推荐阅读最新更新时间:2024-11-04 22:04
设计资源 培训 开发板 精华推荐
- ST7567LCD基于STM32F103的完整驱动源码 原理图 点亮效果图
- 鸢尾立方->4联 HPDL1414 显示模块+验证版+例程+库 开发资料礼包大放送
- 【涂鸦智能】开关&温湿度传感器
- AND8159/D,使用压扩器NE570/SA571用于可变斜率压缩机-扩展器的应用电路
- AM1G-0515SZ 15V 1 瓦 DC/DC 转换器的典型应用
- STM32最小系统,画板基础学习使用
- 使用 Richtek Technology Corporation 的 RT7251AZQW 的参考设计
- CH9121,官方例程,网络透传模块
- LTC3838EUHF-1 4.5V 至 26V 输入、1.2V/15A 和 1.5V/15A 双路输出、350kHz、RSENSE、降压转换器的典型应用电路
- STM32F030C8T6系统板