如果要从某IO端口输出PWM脉冲,相应的工作如下:
1.需要一个定时器实现周期循环计数
2.设置每个循环周期的比较值,从而实现占空比
3.配置某个IO口味定时器的PWM复用功能
例如:实现STM32 的 GPIOB_5 管脚输出PWM脉冲:
(stm32的定时器都有4个通道,PWM有4种模式,主要区别在于高低电平变化的时刻不同)
1.查询芯片手册,GPIOB_5 的复用功能对应定时器3的通道二
2.设置GPIOB_5 端口为复用推挽输出功能
3.设置定时器3的对应的GPIO复用重映射,即可以将定时器的4个通道,通过映射方式设置到不同的io管脚,这里选择部分映射后,通道二就映射到了GPIOB_5 管脚
4.设置定时器3工作在重载向上计数功能,可以设置一个重载预装值
5.设置PWM的工作模式和极性
6.然后将定时器3的通道2初始化设置的PWM模式
7.启动定时器3
8.PWM脉冲高低电平的输出取决于TIMx_ARR和TIMx_CCRx
TIMx_ARR就是定时器3的重装值,定时器3会从0开始计数到重装值后,又从0开始计数,如此反复。而这个计数周期是作为PWM脉冲的频率周期。
也就是在此计数周期内实现一个PWM脉冲周期。例如定时器3重装值=8,即8个定时器脉冲实现从0计数到8.而这8个定时器周期详单与1个pwm脉冲周期,如4个定时器周期是高电平,4个定时器周期为低电平。其中的4由TIMx_CCRx决定。
9.PWM脉冲周期计算
比如:定时器3的时钟频率 为 72MHZ, 重装值为:8, 则PWM的脉冲频率为 72/8 = 9MHZ
TIMx_CCRx决定占空比,可以在PWM脉冲输出的过程中随时改变,从而可以用来控制电机的速度。
关键字:stm32 pwm 实现过程
引用地址:
stm32 pwm实现过程
推荐阅读最新更新时间:2024-03-16 16:07
STM32 学习笔记——GPIO口控制
在配置STM32外设的时候,任何都要先使能该外设的时钟!PB2ENR 是 APB2总线上的外设时钟使能寄存器 我们要使能的PORTA和PORTD的时钟使能位,分别在的时钟使能位,分别在bit2和bit5,只要将这两位置1就可以使能PORTA和PORTD了 STM32的每个IO端口都有7个寄存器来控制。 他们分别是:配置模式的2个32位的端口配置寄存器 CRL 和 CRH;2个32位的数据寄存器IDR 和 ODR ;1个32位的置 复位寄存器 BSRR ;一个 16 位的复寄存器 位的复寄存器 BRR ;1个 32 位的 锁存 寄存器 LCKR ; 这里我们仅介绍常用 的 几个寄存器,我们常用的 IO 端口寄存器只有 4
[单片机]
stm32 中断服务函数是如何进入的
今天在看stm32的中断,一时间不理解stm32主函数是如何进入中断函数的,按C编程的理解,会有个特定的入口之类的,但是看demo过程中没有发现入口。 以串口中断服务函数void USART1_IRQHandler(void) 为例,首先用到串口中断,需要先设定串口中断初始化以及串口初始化,另外void USART1_IRQHandler(void) 中断服务函数也应该写好。 发现在stm32的启动文件startup_stm32f10x_md.s中写到 DCD USART1_IRQHandler 其中DCD是一条数据定义伪指令,用于分配一片连续的字存储单元并用指定的数据初始化。 库里定义 #define USART1 ((
[单片机]
stm32 usart在DMA模式下只能发送一次
问题描述:使用STM32 cube生成usart2 DMA direct mode(不使用FIFO,normal模式,STM32f407)配置代码,usart2可以使用阻塞方式发送,使用DMA发送则只能发送第一次,复位后还只能发送一次。 单步调试发现DMA方式下的发送在发送第一次之后,husart- State 标志变为 HAL_USART_STATE_BUSY就再也不变了。比较直接的解决思路就是在DMA发送中断中给这个标志修改为HAL_USART_STATE_READY,修改之后还是不好用(我认为是可以通过修改多个相关寄存器解决的,但是个人倾向于不深入了解其寄存器,而是用封装度更高的HAL系列函数)。 读stm32f
[单片机]
STM32-中断应用
1、基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是
[单片机]
stm32嵌入式操作系统具有怎样的优缺点
STM32简单介绍 一、背景 如果你正为项目的处理器而进行艰难的选择:一方面抱怨16位单片机有限的指令和性能,另一方面又抱怨32位处理器的高成本和高功耗,那么,基于 ARM Cortex-M3内核的STM32系列处理器也许能帮你解决这个问题。使你不必在性能、成本、功耗等因素之间做出取舍和折衷。 即使你还没有看完STM32的产品手册,但对于这样一款融合ARM和ST技术的“新生儿”相信你和我一样不会担心这款针对16位MCU应用领域 的32位处理器的性能,但是从工程的角度来讲,除了芯片本身的性能和成本之外,你或许还会考虑到开发工具的成本和广泛度;存储器的种类、规模、性能和容 量;以及各种软件获得的难易,我相信你看完本
[单片机]
PIC单片机-PWM波
一、编写程序,使用RC2的PWM功能生成频率250Hz的正弦波 #include htc.h #define uint8 unsigned char #define uint16 unsigned int __CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //设置配置位 //WDTE_OFF:disable watchdog timer 看门狗禁止 //LVP_OFF:low voltage programming disabled 低电压编程禁止 //FOSC_HS:high speed crystal/resonator 4M以上晶振选择HS高
[单片机]
STM32 USATR固件库中定义的几个中断标志的含义
在stm32f10x_usart.h中有以下宏定义: #define USART_IT_PE ((uint16_t)0x0028) #define USART_IT_TXE ((uint16_t)0x0727) #define USART_IT_TC ((uint16_t)0x0626) #define USART_IT_RXNE ((uint16_t)0x0525) #define USART_IT_IDLE ((uint16_t)0x0424) #define USART_IT_LBD ((uint16
[单片机]
STM32单片机中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]