STM32f4---PWM输出实验代码

发布者:asdfrewqpp最新更新时间:2018-09-29 来源: eefocus关键字:STM32f4  PWM输出  实验代码 手机看文章 扫描二维码
随时随地手机看文章

pwm.c源文件代码如下:  

//TIM14 PWM部分初始化  

//PWM输出初始化

//arr:自动重装值   psc:时钟预分频数

void TIM14_PWM_Init(u32 arr,u32 psc)

{                  

  GPIO_InitTypeDef GPIO_InitStructure;

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  TIM_OCInitTypeDef  TIM_OCInitStructure;

  

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);  //TIM14时钟使能     

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能PORTF时钟

  

  GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GF9复用为 TIM14

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                //GPIOF9  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //速度 50MHz

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉

  GPIO_Init(GPIOF,&GPIO_InitStructure);                //初始化PF9

     

  TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频

  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

  TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值

  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;  

  TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14

  

  //初始化TIM14 Channel1 PWM模式    

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM调制模式1

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性低

  TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //初始化外设TIM1 4OC1

  TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能预装载寄存器

     TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE 使能  

  TIM_Cmd(TIM14, ENABLE);  //使能TIM14                     

}

此部分代码包含了上面介绍的PWM输出设置的前5 个步骤。这里我们关于TIM14 的设置就不再说了。  

接下来,我们看看主程序里面的main函数如下:

int main(void)

{  

  u16 led0pwmval=0;     

  u8 dir=1;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

  delay_init(168);  //初始化延时函数

  uart_init(115200);//初始化串口波特率为115200

    TIM14_PWM_Init(500-1,84-1);  //定时器时钟为84M,分频系数为84,所以计数频率

//为84M/84=1Mhz,重装载值500,所 以PWM频率为  1M/500=2Khz.      

     while(1)   

  {

      delay_ms(10);   

    if(dir)led0pwmval++;//dir==1 led0pwmval递增

    else led0pwmval--; //dir==0 led0pwmval递减  

      if(led0pwmval>300)dir=0;//led0pwmval到达 300后,方向为递减

    if(led0pwmval==0)dir=1;  //led0pwmval递减到 0后,方向改为递增

  

    TIM_SetCompare1(TIM14,led0pwmval);  //修改比较值,修改占空比

  }

}

这里,我们从死循环函数可以看出,我们将led0pwmval这个值设置为PWM比较值,也就是通过led0pwmval 来控制 PWM 的占空比,然后控制 led0pwmval 的值从 0 变到 300,然后又从 300变到0,如此循环,因此DS0 的亮度也会跟着信号的占空比变化从暗变到亮,然后又从亮变到暗。至于这里的值,我们为什么取 300,是因为PWM的输出占空比达到这个值的时候,我们的 LED 亮度变化就不大了(虽然最大值可以设置到 499),因此设计过大的值在这里是没必要的。至此,我们的软件设计就完成了。


关键字:STM32f4  PWM输出  实验代码 引用地址:STM32f4---PWM输出实验代码

上一篇:STM32f4---PWM输出实验代码
下一篇:STM32f4---定时器中断实验代码

推荐阅读最新更新时间:2024-03-16 16:14

STM32学习笔记(5):通用定时器PWM输出
1.TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 1.1PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。模式1
[单片机]
第19章 STM32F429的GPIO应用之按键FIFO
19.1 初学者重要提示 学习本章节前,务必保证已经学习了第15,16和17章。 按键FIFO驱动扩展和移植更简单,组合键也更好用。支持按下、弹起、长按和组合键。 19.2 按键硬件设计 V6开发板有三个独立按键和一个五向摇杆,下面是三个独立按键的原理图: 注意,K1(S1)、K2(S2)和K3(S3)按键的上拉电阻是接在5V电压上,因为这三个按键被复用为PS/2键盘鼠标接口,而PS/2是需要5V供电的(注,V5和V6开发板做了PS/2复用)。实际测试,K1、K2、K3按键和PS/2键盘是可以同时工作的。 下面是五向摇杆的原理图: 通过这个硬件设计,有如下两个知识点为大家做介绍: 19.2.1 硬件设计 按
[单片机]
第19章 <font color='red'>STM32F4</font>29的GPIO应用之按键FIFO
STM32 TIM1的PWM没有输出
设置了TIM1的CHN1及CHN4输出PWM,代码如下,但是仿真的波形不对,上设备也不正确: RCC- APB2ENR|=1 11; //TIM1时钟使能 RCC- APB2ENR|=1 2; //使能PORTA时钟 GPIOA- CRH&=0XFFFFFFF0;//PA8输出 GPIOA- CRH|=0X0000000B;//通用推挽输出 GPIOA- ODR|=1 8;//PA8上拉 GPIOA- CRH&=0XFFFF0FFF;//PA11输出 GPIOA- CRH|=0X0000B000;//通用推挽输出 GPIOA- ODR|=1 11;//PA11上拉
[单片机]
stm32f407开发板的时钟配置问题
使用8M的晶振,需要在官方例程的基础上修改两个宏定义: 1)在systm_stm32f40x.c中将PLL_M修改为8 2)在stm32f40x.h中将HSE_VALUE修改为8000000,如下: #define USED_HSE_8M #if !defined (HSE_VALUE) #ifdef USED_HSE_8M #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)25000000) /*! Value of the Exter
[单片机]
stm32f407按键输入函数
unsigned char KEY_Scan(unsigned char mode) { static unsigned char key_release = 1; if(mode) key_release = 1; if(key_release && (1 == KEY0 || 1 == KEY1)) { delay_ms(10); key_release = 0; if(1 == KEY0) return 1; else if(1 == KEY1) return 2; } else if(0 == KEY0 && 0 == KEY1) key_release
[单片机]
STM32F4半生不熟的DMA/USART发送数据
半生:是因为发出了数据 不熟:是因为不太理解。只是用了简单的几个东西 配置DMA操作步骤如下: 1、打开时钟。 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE); 2、配置DMA数据结构 有几点明确的:通过USART1发送数据,ST的F4参考手册里边可以找打USART1说对应的通道:DMA2-Channel4-Stream7。 数据传递方向是Memory2Peripheral。即内存到外设。 不使用FIFO,要传输的数据位于数组usart_tx_buf 中,USART1发送数据寄存器的地址是:USART1_BASE+0x04,内存和
[单片机]
ST为STM32F4高性能嵌入式开发生态系统注入活力
意法半导体(STMicroelectronics,简称ST)首次发布了重要的新开发工具和嵌入式软件组成的强大的STM32F4开发生态系统,同时还宣布2013年初推出的STM32F4 新微控制器 已投入量产。 开发生态系统包括意法半导体的新STM32探索套件 和STM32F4x9全功能评估板以及软件解决方案,例如STM32-JAVA Java和基于Segger emWin解决方案的STemWin免费图形栈。利用STM32F4x7/4x9 的LCD-TFT控制器和图形专用Chrom-ART加速器,图形栈可大幅提升图形处理性能。意法半导体同时还提供先进的音频IP内核,包括编解码器和声音处理算法。此外,意法半导体合作伙伴也提供
[单片机]
MSP430 电容触摸转轮和LED PWM 输出设计
简介 电容触摸技术作为一种实用、时尚的人机交互方式,已经被广泛的应用到各种电子产品,小到电灯开关,大到平板电脑、触摸桌等。随之而来的是考验产品设计者如何发挥智慧,在把产品用户界面设计得方便简洁的同时,又能呈现产品绚丽的外观,从而带来良好的用户体验。 LED 显示由于界面友好,可以实时反映触摸的位置信息,在电容触摸产品设计中得到广泛应用。本设计正是利用了大量的LED 来实现呼吸灯、轨迹灯的特效,可以为例如灯光、音量、温度等带有调节功能的产品提供设计参考。 德州仪器的MSP430 系列单片机以低功耗和外设模块的丰富性而著称,而针对电容触摸应用,MSP430 的PIN RO 电容触摸检测方式支持IO 口直接连接检测电极,不需
[单片机]
MSP430 电容触摸转轮和LED <font color='red'>PWM</font> <font color='red'>输出</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved