STM32之旅7——PWMN

发布者:温暖梦想最新更新时间:2024-08-13 来源: cnblogs关键字:STM32  定时器输出 手机看文章 扫描二维码
随时随地手机看文章

stm32可以使用定时器输出PWM,每一个定时器都有对应的通道,下面是使用hal库产生PWM的步骤:

1、配置系统时钟

2、选择定时器及对应的通道

3、配置定时器及通道

4、业务代码

(1)启动PWM:HAL库里面只有这么一个函数知道调用了这个函数就可以产生PWM


/**

  * @brief  Starts the PWM signal generation.

  * @param  htim TIM handle

  * @param  Channel TIM Channels to be enabled

  *          This parameter can be one of the following values:

  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

  * @retval HAL status

  */

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

{

  uint32_t tmpsmcr;


  /* Check the parameters */

  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));


  /* Enable the Capture compare channel */

  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);


  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)

  {

    /* Enable the main output */

    __HAL_TIM_MOE_ENABLE(htim);

  }


  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

  {

    __HAL_TIM_ENABLE(htim);

  }


  /* Return function status */

  return HAL_OK;

}


另外像CH1N、CH2N、CH3N、CH4N这种互补通道,在生成工程之后还要修改其里面的一个函数:


TIM_OCx_SetConfig();                   //(x = 1, 2, 3, 4)

把那一行换成


tmpccer |= TIM_CCER_CC1NE;

(2)设置占空比的函数(其实是一个宏):


__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) 

如:


__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 80);           //设置TIM_CHANNEL_2N占空比为80

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 50);            //设置TIM_CHANNEL_3N占空比为60

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);                    //开始

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);


关键字:STM32  定时器输出 引用地址:STM32之旅7——PWMN

上一篇:STM32+LWIP+FTP客户端下载文件
下一篇:STM32之旅6——WWDG

推荐阅读最新更新时间:2024-11-02 15:12

STM32 USART使用DMA设置
1、外设时钟初始化 首先初始化需要用到的外围设备设备的时钟,需要初始化的始终有USART RX DMA使用的DMA1、USART1、USART1使用的GPIO、AFIO(如果USART的管脚需要Remap则需要打开否则不用); /* DMA clock enable (USART RX using dma1) */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* USART clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Enable GPIO cloc
[单片机]
STM8S定时器TIM4定时1kHz输出
1.将主时钟切换到HSE;(外部晶振为8MkHz) 2.将主时钟时钟频率8分频,即计数器时钟周期为1us; 3.设置定时器250us中断一次; 4.在中断程序里判断中断次数是否到2次; 5.到2次翻转引脚电平。(逻辑分析仪检测频率) 寄存器版: unsigned char i=255; PE_DDR_DDR5=1;//配置PD0为输出模式 PE_CR1_C15=1;//配置PD0为推挽模式 PE_CR2_C25=0;//配置PD0输出最大为10Mhz if(CLK_CMSR==0xE1) {//如果HSI为主时钟源(复位值),切换到HSE CLK_SWCR_SWIEN=1;//时钟切换中断使能 CLK_SWR=0
[单片机]
STM8S<font color='red'>定时器</font>TIM4定时1kHz<font color='red'>输出</font>
STM32 DMA学习
一个简单的例子 transfer a word data buffer from FLASH memory to embedded SRAM memory. 在V3.1.2库的位置 STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_Examples\DMA\FLASH_RAM /* DMA1 channel6 configuration */ DMA_DeInit(DMA1_Channel6); //peripheral base address DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_
[单片机]
<font color='red'>STM32</font> DMA学习
C51单片机 定时器模拟单路输出PWM
前言 本博文基于STC89C52RC和Keil5 C51环境开发; 如有不足之处还请多多指教; 需要的东西 定时器0; 管脚P1.0; 代码如下: #include STC89C5xRC.H #define ENABLE 1 #define DISENABLE 0 typedef unsigned char uchar8; sbit P1_0 = P1^0; bit Flag = 0; /* 占空比的时间计算: 占空比 = 高电平时间 /(高电平时间+低电平时间); */ //高电平时间(初始值为:0x02EE,即十进制750) uchar8 Timer0_TH0_High_Level_Time = 0
[单片机]
STM32基础PWM输出
a)目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。 b)对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。 c)初始化函数定义: void TIM_ConfiguraTIon(void);//定义TIM初始化函数 d)初始化函数调用: TIM_Configuration();//TIM初始化函数调用 e)初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始化和通道初始化: void TIM_Configuration(void)//TIM初始化函数 { TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//
[单片机]
STM32串口配置(基于uC/OS)
在uC/OS下,串口配置与不使用uC/OS基本相同,但中断处理有些差别。在uC/OS下取消了固件库中的stm32f10x_it.c文件,去而代之的是app_vect_v5.c. 下面是几个中断处理的函数: bsp_int.c提供几个关键的中断操作函数: void BSP_IntDis (CPU_DATA int_id) //关闭指定中断 void BSP_IntDisAll (void) //关闭所有中断 void BSP_IntEn
[单片机]
介绍如何通过意法的STM32 MCU实现用DMA完成多通道的AD采样功能
在嵌入式产品中有时候需要实现对外部的模拟量进行采样处理和记录,而这就需要使用到ADC功能,将外部的模拟量转换成数字量。而在复杂的嵌入式产品中,往往需要使用多路AD采样,例如在智能家居产品,电池电量检测,热敏温度传感器,烟雾传感器,气敏传感器等都是可以使用ADC来实现采样的。在本文章,将会介绍如何通过意法的STM32 MCU实现用DMA完成多通道的AD采样功能。 什么叫ADC ADC即模拟数字转换器(英语:Analog-to-digital converter)是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。一个模拟数字转换器可以提供信号用于测量。与之相对的设备成为数字模拟转换器。 影响AD采样的因素有哪些 分
[单片机]
介绍如何通过意法的<font color='red'>STM32</font> MCU实现用DMA完成多通道的AD采样功能
STM32掌机教程7,演奏音乐
使用定时器来计算时间   在电子琴这节中,我们已经讲述了蜂鸣器的原理,知道如何用蜂鸣器演示不同音调的音乐,本节改进根据频率计算周期的方法,改为定时器,精确度更高,且不再阻塞CPU。   首先,我们不再把蜂鸣器的控制引脚PB1作为普通IO,而是作为定时器的通道。在IO的初始化中,不应当继续操作PB1。通过查看数据手册,可以知道,PB1可以作为定时器3的通道4。(当然也可以作为定时器1和定时器8的通道,只不过定时器1和8是高级定时器,用起来稍微复杂一点点)。 通道的概念类似于道路。   然后编写初始化函数。这段初始化函数可能比较复杂,我们暂时无需深究,只需要知道,这个定时器做了这么一件事情: 把原先这样的代码延时,交给了定时器自
[单片机]
<font color='red'>STM32</font>掌机教程7,演奏音乐
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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