stm32学习笔记(九)PWM输出

发布者:电子设计艺术家最新更新时间:2018-12-29 来源: eefocus关键字:stm32  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

#include "pwm.h"

#include "led.h"

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK Mini STM32开发板

//PWM  驱动代码    

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2010/12/03

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 正点原子 2009-2019

//All rights reserved

//////////////////////////////////////////////////////////////////////////////////   

 

 

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM1_PWM_Init(u16 arr,u16 psc)

{  

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能

                                                                     

 

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

 


TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K

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

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

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

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 

 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

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

TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

 

  TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能

 

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能  


TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器


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

 

   

}



TIM_SetCompare1(TIM1,led0pwmval);


设置


void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)

{

  /* Check the parameters */

  assert_param(IS_TIM_LIST8_PERIPH(TIMx));

  /* Set the Capture Compare1 Register value */

  TIMx->CCR1 = Compare1;

}


TIM1_CCR1的值来控制脉宽


关键字:stm32  PWM输出 引用地址:stm32学习笔记(九)PWM输出

上一篇:stm32学习笔记(十)输入捕获实验
下一篇:stm32学习笔记(七)定时器中断

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

STM32单片机ISP烧写
一般学生比较少遇到,但开始工作,进行软件开发时,会遇到各种“匪夷所思”的问题不过,慢慢积累就能对硬件、软件有一定了解,能让你很快的精通! 在使用stm32f103系列的mcu时,当时还在学校的时候用的jtag(盗版)烧写,对烧写引脚没有那么关注(反正能烧写就行)但是到了企业工作后,发现一般只使用4个引脚烧写——就是所谓的SWD模式只需要4根引脚(VCC、GND、SWCLK、SWDATA)之所以只留四个接口是因为可以将芯片做的更小,设备更小!并且有时候mcu的JTAG调试接口会被当成普通IO口来使用,因此就需要使用管脚复用功能,一旦复用,就要小心!!!当你把烧写接口复用后,能写进去,但是就不能再烧写了! 因此步入主题——IS
[单片机]
智能小车运行及测速原理
光电码盘测速原理 如何求解小车速度参数(大小与方向)? 测量速度方向的方法 根据A、B两相脉冲的超前滞后关系确定电机旋转方向: 假定A相超前于B相时,为电机正方向;则当A相滞后于B相,当前电机为反向旋转。 普通测量速度大小的方法 单位时间内采集的脉冲数就是转速大小的表征值,可以根据它转换为各种单位下的转速大小。 四倍频测量速度的大小 下面我们说一下编码器倍频的原理。为了提高大家下面学习的兴趣,我们先明确,这是一项实用的技术,可以真正地把编码器的精度提升 4 倍。作用可类比 于单反相机的光学变焦,而并非牺牲清晰度来放大图像的数码变焦。OK,先看看下面编码器输出的波形图。 这里,我们是通过软件的方法实现四倍频。首先
[单片机]
智能小车运行及测速原理
ARM DS-5开发STM32程序(Eclipse配合Keil插件使用)
ARM DS-5是基于Eclipse的ARM开发环境,有完善的编译流程,配合Keil插件开发STM32效果更佳。废话不多,先介绍思路: 1.安装MDK软件,就有编译STM32的工具链。我使用是MDK 4.72的。 http://pan.baidu.com/s/1o6iHPVG 2.安装DS-5,并注册社区版(免费阉割)。 http://pan.baidu.com/s/1mgHX2JY 补充:社区版激活代码: http://ds.arm.com/zh-cn/ds-5-community-edition/getting-started/ 3.运行DS-5安装Keil插件 安装好Keil插件后只是使用了Keil的调试和下载
[单片机]
ARM DS-5开发<font color='red'>STM32</font>程序(Eclipse配合Keil插件使用)
STM32之RCC原理
1、时钟源 在 STM32 中,一共有 5 个时钟源,分别是 HSI 、 HSE 、 LSI 、 LSE 、 PLL 。 ①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz ; ②HSE 是高速外部时钟,可接石英 / 陶瓷谐振器,或者接外部时钟源,频率范围是 4MHz – 16MHz ; ③LSI 是低速内部时钟, RC 振荡器,频率为 40KHz ; ④LSE 是低速外部时钟,接频率为 32.768KHz 的石英晶体; ⑤PLL 为锁相环倍频输出,严格的来说并不算一个独立的时钟源, PLL 的输入可以接 HSI/2 、 HSE 或者 HSE/2 。PLL倍频可选择为 2 – 16 倍,但是其输出频
[单片机]
<font color='red'>STM32</font>之RCC原理
STM32综合网上讲解的几种读保护措施
以下内容是在STM32F103系列单片机实验成功! STM32可以对存储在flash上的程序进行读保护. 启动读保护后,用户就不能再读写程序了. 所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序 头文件位于:#include stm32f10x_flash.h 启动保护,用在main()函数初始化时调用: void Set_Protect(void) //启动保护 {   if(FLASH_GetReadOutProtectionStatus() != SET)   {     FLASH_Unlock(); //解锁     FLASH_ReadOutProtection(ENABLE
[单片机]
<font color='red'>STM32</font>综合网上讲解的几种读保护措施
基于STM32自码DS18B20驱动程序
DS18B20是一款单总线可编程分辨率的数字温度计,详细内容可见中英文datasheet,笔者不在赘述。 很早就接触到的温度传感器,也相信每一个曾学习过嵌入式开发的人都用过,笔者在STM32F4上自码DS18B20驱动,有些小小心得: DS18B20的控制流程 根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。每次对DS18B20的操作都要进行以上三个步骤。 复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉
[嵌入式]
stm32---ADXL345
ADXL345是一款三轴加速度传感器,广泛用于手机、游戏手柄等设计。 ADXL 支持标准的 I2C 或 SPI 数字接口,自带 32 级 FIFO 存储,并且内 部有多种运动状态检测和灵活的中断方式等特性,常用I2C接口 检测轴 初始化步骤 1)上电 2)等待 1.1ms 3)初始化命令序列 4)结束 其中上电这个动作发生在开发板第一次上电的时候,在上电之后,等待 1.1ms 左右,就可以开始发送初始化序列了,初始化序列一结束, ADXL345 就 开始正常工作了 stm里的硬件电路 adxl345.c #include adxl345.h #include iic.h #include math.h #
[单片机]
stm32---ADXL345
如何升级STM32单片机的代码
bootloader设置: static void check_boot_mode(void) { uint32_t JumpAddress; void(*Jump_To_Application)(void); if (((*((__IO uint32_t*)(APP_SEGA_START_ADDRESS+8))) & 0x2FFE0000 ) == 0x20000000) { JumpAddress = *(__IO uint32_t*) (APP_SEGA_START_ADDRESS + 12); Jump_To_Application = (void *)JumpAddress; __set_MSP(*((__IO ui
[单片机]
如何升级<font color='red'>STM32</font>单片机的代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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