STM32F207管脚映射配置PWM输出笔记

发布者:huanran最新更新时间:2019-10-25 来源: eefocus关键字:STM32F207  管脚映射  配置  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

已亲测,可以实现。


第一步:配置相关管脚输出,比如我的是配置到PB9,使用的是定时器4的第四通道。


void Pwm_Gpio_Config(void)

{

 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

 

 /*GPIOB_Pin_9, TIM4_Channel4 PWM*/

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

 GPIO_Init(GPIOB, &GPIO_InitStructure);

 

 GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_TIM4);//GPIOB_Pin9 TIM4_Ch4N,

}


第二步:配置定时器。


2.配置定时器:


首先是像51单片机一样需要给出定时器一个初始值。而stm32的时钟比51的复杂。我们的STM32的定时器4使用的是APB1的时钟(使用APB1时钟有TIM2, TIM3 , TIM4 ,TIM5 , TIM6 ,TIM7,TIM12,TIM13,TIM14这些,最大频率为60MHZ。使用APB2时钟的有TIM1,TIM8最大的频率为120MHZ)。


2-1:当我们想配置我们的时钟频率为20000000hz。我们就需要设置预分频系数TIM_Prescaler ,从而使得高频率降到我们需要的频率。通过公式Prescaler = (TIM4CLK / TIM4 counter clock) - 1。我们的主时钟为120MHZ,APB1时钟是主时钟的2分频为60MHZ。所以TIM4CLK 是60MHZ。我们需要的TIM4 counter clock为20MHZ,所以得出我们的预分频系数Prescaler 为2,这样就可以取得TIM4的时钟输入频率为20MHZ了。


2-2:我们已经获得时钟频率,那么如何设置才可以让定时器出我们需要的定时呢?这个很简单,就像我们的51单片机一样,有了定时器的时钟,我们就知道他运算一次是多长时间,我们需要定时多久,就是要他运行多少次。举个例子:我们需要0.5秒的定时,而我们的定时器时钟为20MHZ。那么运行一次是1/20MHZ=0.05us。所以我们定时0.5秒需要定时器运行0.5/0.05us=10000000次。那么我们把计数寄存器(对于变量为TIM_Period )赋值为10000000,这样定时器定时为0.5秒了。

在我们需要向定时器里面填入初值,就可以设定频率。


2-3:这里还有一个参数需要配置,就是计数的模式,这里选择是向上计数模式。通俗点讲就是从0开始计数,计数到设定的初值TIM_Period 就产生一个事件(终端或者其他)。


2-4:执行TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);到目前为止定时器已经配置好了。


第三步:设置PWM 


3-1.TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;设置PWM模式(有PWM1和PWM2模式,两个模式刚好相反)具体看《STM32中文参考手册》。


3-2.配置TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;以便和计数器比较产生PWM:


3-3.配置TIM_OCInitStructure.TIM_Pulse = 333;//设置占空比; 占空比 = [TIM_Pulse/TIM_Period)* 100 = 50%。


3-4.配置TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//设置有效极性,也就是设置比较输出的有效电平


详细见代码:

void Time4_Config(void)

{

 /* -----------------------------------------------------------------------

 TIM4 Configuration: generate 4 PWM signals with 4 different duty cycles.

 In this example TIM4 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1),

 since APB1 prescaler is different from 1.

 TIM3CLK = 2 * PCLK1

 PCLK1 = HCLK / 4

 => TIM4CLK = HCLK / 2 = SystemCoreClock /2

 To get TIM4 counter clock at 20 MHz, the prescaler is computed as follows:

 Prescaler = (TIM4CLK / TIM4 counter clock) - 1

 Prescaler = ((SystemCoreClock /2) /20 MHz) - 1

 To get TIM4 output clock at 30 KHz, the period (ARR)) is computed as follows:

 ARR = (TIM4 counter clock / TIM4 output clock) - 1= 665

 TIM4 Channel1 duty cycle = (TIM4_CCR1[TIM_Pulse]/ TIM4_ARR[TIM_Period])* 100 = 50%

 ----------------------------------------------------------------------- */

  u32 PrescalerValue  = 0;

 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 TIM_OCInitTypeDef TIM_OCInitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//时能定时器时钟4

 TIM_DeInit(TIM4);

 /* Compute the prescaler value */

 PrescalerValue = (uint16_t) ((120000000/2) / 20000000) - 1;

 

 /* Time base configuration */

 TIM_TimeBaseStructure.TIM_Period = 665;//ARR 计数初值设置PWM频率计数初值

 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;//PSC 设置用来作为TIMx时钟频率除数的预分频值

 TIM_TimeBaseStructure.TIM_ClockDivision = 0;

 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

 /* PWM1 Mode configuration: Channel4 */

 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

 TIM_OCInitStructure.TIM_Pulse = 333;//设置占空比

 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//设置有效极性,也就是设置比较输出的有效电平。

 TIM_OC4Init(TIM4, &TIM_OCInitStructure);

 TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);

 

 TIM_ARRPreloadConfig(TIM4, ENABLE);

 /* TIM4 enable counter */

 TIM_Cmd(TIM4, ENABLE);

/*

 TIM_ClearFlag(TIM4, TIM_FLAG_Update);

 TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);

 TIM_Cmd(TIM4, ENABLE);

 TIM_CtrlPWMOutputs(TIM4, ENABLE);

 */

}


关键字:STM32F207  管脚映射  配置  PWM输出 引用地址:STM32F207管脚映射配置PWM输出笔记

上一篇:STM32 单片机之 串口重映射(USART Remap)
下一篇:如何配置STM32F103的重映射USART

推荐阅读最新更新时间:2024-11-04 12:07

用于MR16 LED灯的简单、可配置LED驱动器应用设计
MR16灯属于多面向反射灯的一种,广泛用于商业零售和家居的装饰性照明,由于它通常以卤素灯丝作为光源,故有诸多缺点如低效率、产生较多热量和卤素囊处理等问题.。但当前的LED技术提供了与MR16兼容、高度可靠、具有高性价比的卤素灯替代方案。例如,安森美半导体能驱动3颗串联LED的驱动器CAT4201就为设计MR16 LED灯的工程师提供了一个新的选择。以下将结合MR16灯的特点,介绍用替代MR16卤素灯的高能效MR16 LED灯驱动器解决方案。 卤素灯与LED的特性 MR16卤素灯凭借其独特的尺寸、可配置性、聚光能力、美观性和实用性,应用于很多零售和消费性应用的创意照明。常见的MR16卤素灯的光通量范围为150流明(lm)至800
[电源管理]
用于MR16 LED灯的简单、可<font color='red'>配置</font>LED驱动器应用设计
音响工程扬声器系统配置经验
扬声器系统要高质量的重放出各种音乐节目,那么根据音乐信号的属性,其峰值因子约为10-15DB,从保证音质这个角度来说,功放应在此动态范围内不发生任何限幅情况,即功放的最大输出功率应是扬声器额定功率的5-8倍,这样的功率配置音质虽然很好,但他的投资会很大,因此一般都会把这个功率配比定在1-2倍扬声器单元的额定功率。   以下是一般音响工程中的配置经验   1、在一些要求较低而投资有限的工程,功放的功率起码相当于音箱的额定功率。但要非常注意保持声音不失真。过小的功率配置看起来不会损坏扬声器单元,其实不然。过小的功率极易发生过载削波,产生大量谐波,烧毁高音单元。   2、一般工程建议功放的功率是1.5倍。而低音部份最好超过1.5倍,这
[模拟电子]
通信系统供电系统的合理化配置
   通信电源 的管理工作应根据技术发展、管理发展和实践反馈中不断地探索、改进,终极目标是不断改进管理工作提高设备运行可靠性。其中,通信供电系统的合理化配置必须注意以下几点:   (1)在交流供电系统中,逐步推广自动倒换装置,并具备机械式手动切换功能,以备紧急时使用。大容量(2000 kVA以上)交流供电系统中,提倡用两个子供电系统供电(变压器和油机)分别供电,子供电系统之间采用联络柜互为备用,油机尽量不使用并机运行。重要局点(如枢纽局、数据中心、IDC中心等)要争取引入两路不同变电站的高压线路,提高供电可靠性。由于大容量低压断路器一般不留备件,一旦损坏,判断故障原因和维修时间较长,应及时启动应急预案用临时电缆跨接临时供电(要排除
[电源管理]
STM32CubeMX时钟配置详解
软件: (1)STM32CubeMX (2)SW4STM32 实验平台:STM32F407VET6开发板 使用STM32CubeMX的一个好处就是图形化配置,在时钟配置方面,主要了解清楚高级外设总线(APB1、APB2)控制哪些外设。 (0)先配置好PA6、PA7(控制LED灯),好观察实验现象 (1)首先配置RCC(复位和时钟控制),选择外部高速始终,如下图 (2)为了测试不同APB的时钟频率效果,在此选择了TIM1和TIM2,按下图配置 (3)为什么选择以上两个定时器作为例子?参考STM32F4XX中文参考手册,找到RCC相关内容,如图 可知TIM1 在APB2,TIM2 在APB1 (4)进入时钟配置,我的
[单片机]
STM32CubeMX时钟<font color='red'>配置</font>详解
STM32F407 GPIO口输出配置配置步骤
STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。 【1】F407建工程所需依赖文件 【2】 新建工程 **说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通过 SW 选择 SYSCLK=PLLCLK即可得到 168Mhz 的系统运行频率。** 【3】分析LED硬件原理图 【4】编写L
[单片机]
STM32F407 GPIO口<font color='red'>输出</font><font color='red'>配置</font><font color='red'>配置</font>步骤
有钱任性 盘点土豪光伏逆变器顶级配置
托江西人老刘的福,“有钱,就是这么任性”已经成为人们耳熟能详的流行词汇。这位“神一般存在”的老刘,在明知被骗的情况下仍旧坚持向骗子汇出54万巨款,他那离奇的态度和心理也是令人们瞠目结舌:被骗到7万的时候就已经发现被骗,但觉得公安局可能不会管,就决定赌一把,继续让骗子骗,看看究竟能骗自己多少钱。老刘这种心理反映出的社会问题暂且不说,今天逆变器小刘和大家说一下被业内调侃成“有钱就是任性”的土豪光伏逆变器,看看土豪们的顶级配置。 1、这个叫直流拍合式接触器,只有ABB公司才有。 并且在原厂加工,采用磁吹灭弧系统设计,有超强灭弧能力,通断电流达4000ADC,电压达1500VDC,特别适用于严酷条件下仍要求产品拥有高性能表现的工业应用
[新能源]
stm32 dac 配置过程
DAC模块的通道1来输出模拟电压,其详细设置步骤如下: 1)开启PA口时钟,设置PA4为模拟输入。 STM32F103ZET6的DAC通道1是接在PA4上的,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入(虽然是输入,但是STM32内部会连接在DAC模拟输出上)。 2)使能DAC1时钟。 同其他外设一样,要想使用,必须先开启相应的时钟。STM32的DAC模块时钟是由APB1提供的,所以我们先要在APB1ENR寄存器里面设置DAC模块的时钟使能。 3)设置DAC的工作模式。 该部分设置全部通过DAC_CR设置实现,包括:DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。 4)设置DAC的
[单片机]
单片机定时/计数器设计输出PWM
  一、定时/计数器PWM设计要点   根据 PWM 是利用微处理器的数字输出来对模拟电路进行控制的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点:   1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。   2.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而比较匹配寄存器的值决定了占空比的大小。PWM频率的计算公式为:   3.然后根据需要PW
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved