stm32 PWM产生

发布者:Huayu8888最新更新时间:2024-10-08 来源: cnblogs关键字:stm32  PWM 手机看文章 扫描二维码
随时随地手机看文章
  1. /* TIM Configuration */

  2.   TIM_Config();


  3.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);


  4.   TIM_OCStructInit(&TIM_OCInitStructure);


  5.   /* ---------------------------------------------------------------------------

  6.      TIM8 is configured to generate an Asymetric signal with a programmable

  7.      Phase-Shifted signal on TIM8_CH2:

  8.      - TIM8 Channel 1 is configured in PWM2 mode

  9.      - TIM8 Channel 2 is configured in Asymetric PWM2 mode

  10.      - The counter mode is center aligned mode

  11.      - The pulse length and the phase shift are programmed consecutively in TIM8_CCR2 and TIM8_CCR1.


  12.      TIM1 is configured to generating the reference signal on Channel1 used by TIM8:

  13.      - TIM1 is generating a PWM signal with frequency equal to 1.5KHz

  14.      - TIM1 is used as master for TIM8, the update event of TIM1 genarates the Reset counter

  15.      of TIM8 to synchronize the two signals: the reference signal (TIM1_CH1) and

  16.             the shifted signal (TIM8_CH2).

  17.     

  18.     In this example TIM1 and TIM8 input clock (TIM18CLK) is set to APB2 clock (PCLK2)

  19.     TIM1 and TIM8 signals are at frequency of (SystemCoreClock / (PWM_FREQUENCY + 1))

  20.                

  21.     TIM8 is gerating a signal with the following caracteristics:

  22.      - Pulse lenght = (TIM8_CCR1 + TIM8_CCR2) / TIM8_CLK

  23.      - Phase shift = TIM8_CCR1/TIM8_CLK

  24.      with TIM8_CLK = (SystemCoreClock / (Period + 1)), as the prescaler is equal to zero.

  25.     

  26.     Note:

  27.      SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f30x.c file.

  28.      Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()

  29.      function to update SystemCoreClock variable value. Otherwise, any configuration

  30.      based on this variable will be incorrect.

  31.   --------------------------------------------------------------------------- */

  32.   /* Initialize Timers: TIM1 & TIM8 */

  33.   /* Time base configuration for TIM8 and TIM1 */

  34.   TIM_TimeBaseStructure.TIM_Period = PWM_FREQUENCY;     //

  35.   TIM_TimeBaseStructure.TIM_Prescaler = 0;        // this prescaler is 1

  36.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;


  37.   /* First wrong parameter: Counting Mode,TIM8 counting direction has to be set to center-aligned mode */

  38.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;

  39.   

  40.   TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

  41.   

  42.     //??????????TIM8?????ì???????????ú????·??????è??????????????·?????????·???????????????????????

  43.   TIM_TimeBaseStructure.TIM_Period = 2 * PWM_FREQUENCY;        // 1??PWM?¨???????è?¨

  44.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  45.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


  46.   /* Channels 1&2 configuration on TIM8 */

  47.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

  48.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  49.   TIM_OCInitStructure.TIM_Pulse = INITIAL_PHASE;

  50.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  51.   TIM_OC1Init(TIM8, &TIM_OCInitStructure); /* Channel1 config done */

  52.   

  53.   /* Second wrong parameter: PWM Mode */

  54.   /* The same PWM mode has to be configured for the two coupled channels */

  55.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Asymmetric_PWM2;


  56.   TIM_OCInitStructure.TIM_Pulse = INITIAL_LENGTH;

  57.   TIM_OC2Init(TIM8, &TIM_OCInitStructure); /* Channel2 config done */

  58.   

  59.   /* Channel1 configuration on TIM1 */

  60.   TIM_OCInitStructure.TIM_Pulse = 2 * PWM_FREQUENCY / 10 * 0.9;        // 2??PWM ????±?

  61.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

  62.   TIM_OC1Init(TIM1, &TIM_OCInitStructure);


  63.   /* Enable outputs on both TIM1 & TIM8*/

  64.   TIM_CtrlPWMOutputs(TIM8, ENABLE);

  65.   TIM_CtrlPWMOutputs(TIM1, ENABLE);


  66.   /* Synchronization between TIM1 and TIM8

  67.   The aim is to generate a reference signal on TIM1_CH1

  68.   The Phase-Shifted siganl generated on TIM8_CH2 is compared to the reference

  69.   signal

  70.   */

  71.   TIM_SelectSlaveMode(TIM8, TIM_SlaveMode_Reset); /* Configure TIM8 in slave

  72.   mode: an active edge on trigger input generates a reset on tIM8 */

  73.   

  74.   TIM_SelectInputTrigger(TIM8, TIM_TS_ITR0); /* Connect TIM1 to TIM8

  75.   TIM1 is the Master

  76.   TIM8 is the Slave */

  77.   

  78.   TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update); /* Select the Update

  79.   to be the Master Trigger-Out TRGO signal origine */

  80.   

  81.   TIM_CCPreloadControl(TIM8, ENABLE); /* Enable Shadaw register on TIM8

  82.   CCRx register are not accessed directly: their content is updated each Update

  83.   event */

  84.   

  85.   /* TIM8 enable counter */

  86.   TIM_Cmd(TIM1, ENABLE);

  87.   TIM_Cmd(TIM8, ENABLE) 


关键字:stm32  PWM 引用地址:stm32 PWM产生

上一篇:STM32 DAC 播放wav 语音
下一篇:第16章 STM32中断应用概览

推荐阅读最新更新时间:2024-11-08 11:51

STM32学习日志——DMA实验
一、DMA简介 DMA全程Direct Memory Access,即直接存储器访问;传输数据从一个地址空间复制到另一个地址空间,CPU只初始化这个传输动作,传输动作本身由DMA控制器完成,无需经过CPU控制,使CPU效率大大提高。STM32最多由2个DMA,DMA2仅存在于大容量芯片,DMA1有7个通道,DMA2有5个通道。DMA具有4个优先级:分别是最高、高、中等、低。仲裁器根据优先级来启动DAM。它可以实现外设到存储器、存储器到外设、存储器到存储器的传输。传输数据宽度分为字节(8bit),半字(16bit),字(32bit);传输源与传输目标的数据宽度应一致,不一致可能导致数据丢失,详情可查阅STM32中文参考手册表57:可
[单片机]
<font color='red'>STM32</font>学习日志——DMA实验
STM32中断优先级和开关总中断开关
简介:STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 一,中断优先级: 当两个中断源的抢占式优先级相同时: 1.这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。 2.如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;
[单片机]
DMA的外设地址简单说明
说成外设寄存器地址不就完了么,和内核的总线地址又容易混起来,总之dma的源和目的地址,涉及到外设的,就是外设寄存器,iis数据要从总线跑到外设寄存器上,dma才能亮剑 关于在STM32的DMA中使用外设地址 在使用的DMA的时候,有时候需要将外设的地址作为源地址或者目的地址,对于初学者来说这个地址在哪边确定有点犯难,这篇文章就来告诉大家如何快速找到你需要的地址。 我们先看一个DMA初始化的例子: //DMA初始化函数 void UsartDMA_Init(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENAB
[单片机]
STM32 之 SysTick
感觉定时1秒还是有点不准,仅为目测,下次用示波器去测量下。 包含文件: (1)Main C语言: Codee#14620 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-10-26 + 频率 :HSE = 8MHz ,主频 = 72MHz +++++++++++++++++++++++++++++++++++
[单片机]
<font color='red'>STM32</font> 之 SysTick
STM32_MDK_bxCAN
今天整理下CAN方面的资料,首先使用的是stm32f103vet6,只有一个CAN(2.0A & 2.0B)。CAN本身是工作的数据链路层的总线,有很多优势就不再一一介绍了,随便买本书看看都有。 基础的CAN的知识就不赘述了,这些是必要的可以自己去买书了解,现在来看下STM32下对CAN的驱动,STM32本身包括了CAN的数据链路层,然后物理层就是CAN收发器用的是TJA1050,是非容错CAN。终端电阻用120欧姆。 说道CAN最主要的是CAN的初始化,他包括两个主要的部分,一个是基本属性的声明,另一部分就是过滤器的设置。见如下代码: /*******************************************
[单片机]
STM32串口通信和I/O口简单代码
#include stm32f10x_lib.h #include sys.h #include delay.h #include usart.h #include led.h int main(void) { u8 k; //点亮的灯位数 u8 i; Stm32_Clock_Init(9); //系统时钟初始化 delay_init(72); //延时初始化 uart_init(72,9600); //串口初始化 led_init(); //灯I/O配置初始化 while(1) { if(USART_RX_STA&0x80) //接受到数据
[单片机]
<font color='red'>STM32</font>串口通信和I/O口简单代码
STM32时钟详解
在STM32 中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL 是由锁相环电路倍频 得到PLL 时钟。 ①、HSI 是高速内部时钟,RC 振荡器,频率为8MHz。 ②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI 是低速内部时钟,RC 振荡器,频率为40kHz。 ④、LSE 是低速外部时钟,接频率为32.768kHz 的石英晶体。 ⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE 或者HSE/2。倍频可选择为2~16 倍,但是其输出频率最大不得超 过72MHz。 其中40
[单片机]
GD32代码移植STM32(一)
GAIWEI例子:GD32F103移植STM32F103 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存器地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是STM32F10x主频是72兆。所以需要针对以RCC时钟进行修改。 1.先将芯片的选项进行修改:查找对应芯片。 2.将STM32的启动文件替换成GD的启动文件。 3.修改时钟相关配置。 打开stm32f10x.h文件,#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*! Time out for HSE start up
[单片机]
GD32代码移植<font color='red'>STM32</font>(一)
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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