STM32学习笔记(PWM输出)

发布者:科技创新实践者最新更新时间:2019-08-22 来源: eefocus关键字:STM32  学习笔记  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

本人采用Cube 进行的STM32库函数编程,PWM波的输出配置以及代码如下所示:(经过实际实验证明非常好用)

以下为定时器PWM输出函数,注意:使用时一定要把原来输出函数注释掉。

注释代码如下:

// sConfigOC.OCMode = TIM_OCMODE_PWM1;

// sConfigOC.Pulse = 0;

// sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

// sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

// if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

// {

// _Error_Handler(FILE, LINE);

// }


// if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)

// {

// _Error_Handler(FILE, LINE);

// }


// if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)

// {

// _Error_Handler(FILE, LINE);

// }


// if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)

// {

// _Error_Handler(FILE, LINE);

// }

void PWM_Change_Duty(float x,float y,float z,float w)

{

TIM_OC_InitTypeDef sConfigOC;

sConfigOC.OCMode = TIM_OCMODE_PWM1;//pwm输出模式配置

sConfigOC.Pulse = x;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

//pwm输出停止函数

if(HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_1) != HAL_OK)

{

_Error_Handler(FILE, LINE);//错误等待函数

}

//pwm输出配置函数

if(HAL_TIM_PWM_ConfigChannel(&htim4,&sConfigOC,TIM_CHANNEL_1) != HAL_OK)

{

_Error_Handler(FILE,LINE);

}

//pwm输出开始函数

if(HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1)!= HAL_OK)

{

_Error_Handler(FILE,LINE);

}

sConfigOC.Pulse = y;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

//pwm输出停止函数

if(HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_2) != HAL_OK)

{

_Error_Handler(FILE, LINE);//错误等待函数

}

//pwm输出配置函数

if(HAL_TIM_PWM_ConfigChannel(&htim4,&sConfigOC,TIM_CHANNEL_2) != HAL_OK)

{

_Error_Handler(FILE,LINE);

}

//pwm输出开始函数

if(HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2)!= HAL_OK)

{

_Error_Handler(FILE,LINE);

}


sConfigOC.Pulse = z;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

//pwm输出停止函数

if(HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_3) != HAL_OK)

{

_Error_Handler(FILE, LINE);//错误等待函数

}

//pwm输出配置函数

if(HAL_TIM_PWM_ConfigChannel(&htim4,&sConfigOC,TIM_CHANNEL_3) != HAL_OK)

{

_Error_Handler(FILE,LINE);

}

//pwm输出开始函数

if(HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3)!= HAL_OK)

{

_Error_Handler(FILE,LINE);

}


sConfigOC.Pulse = w;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

//pwm输出停止函数

if(HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_4) != HAL_OK)

{

_Error_Handler(FILE, LINE);//错误等待函数

}

//pwm输出配置函数

if(HAL_TIM_PWM_ConfigChannel(&htim4,&sConfigOC,TIM_CHANNEL_4) != HAL_OK)

{

_Error_Handler(FILE,LINE);

}

//pwm输出开始函数

if(HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4)!= HAL_OK)

{

_Error_Handler(FILE,LINE);

}

}


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

上一篇:STM32死机 调试时进入HardFault_Handler定位错误的方法
下一篇:stm32入门——PWM输出控制直流电机变速

推荐阅读最新更新时间:2024-11-07 00:45

STM32缺陷之一:串口中断标志位缺陷
根据小道消息,M3内核是有缺陷的,但是这种缺陷不会在大会上想广大群众透露的。我用的是M3内核的stm32,我来寻找一些缺陷。 今天找到的是串口中断标志位缺陷。 我是做四轴飞行器的,没有买遥控器,而是用的无线串口,一开始的想法是stm32接收到串口来的数据后,进入串口中断服务函数,再比对发来的数据进行接下来的动作。 一开始的程序是没有问题的,简单点吧,串口接收到数据后,让LED转换状态。 void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) ==SET) { USART_ClearFlag (USART2
[单片机]
stm32: 固件库文件说明
关于固件库文件说明 固件库文件夹STM32F10x_StdPeriph_Lib_V3.5.0下文件说明: 一、Libraries文件夹主要文件有: 1、core_cm3.c , core_cm3.h :CMSIS核心文件,通过进入Cortex_M3内核的接口 2、startup文件夹下是系统启动文件,根据不同的芯片选用启动文件,103系列芯片选用startup_stm32f10x_hd.s 3、system_stm32f10x.c , system_stm32f10x.h :设置系统及总线时钟,其中SystemInit函数在系统启动时,设置时钟系统。 4、stm32f10x.h :系统寄存器定义、声明、内存操作。 二、P
[单片机]
基于stm32的异步电机反嵌绕组检测方法
  文章通过程序控制stm32芯片产生PWM方波使电机带动永磁体旋转,其定子绕组上感应出的电压信号通过装置中包括的巴特沃斯二阶低通滤波器,并且再通过带偏置的反相比例放大器。将滤波后的信号输入装置中,通过对所采集信号的采集、判读,检测是否存在反嵌绕组。通过实验研究后表明,该研究成果在电机不通电的情况下以最简单的方法完成对定子是否存在反嵌绕组的检测。   1.引言   电机是在工业生产过程中普遍使用的装置,电机的故障往往会带来严重的后果与损失。定子绕组是三相异步电动机的主要组成部分,也是电动机最容易损坏而造成故障的部件。异步电机在生产过程中,由于生产工人的失误,有可能发生定子绕组反嵌的现象,发生电动机启动困难,三相电流严重失衡且电
[单片机]
基于<font color='red'>stm32</font>的异步电机反嵌绕组检测方法
STC单片机实现可调PWM输出的C51程序
//以下是源程序,只需修改定义IO口就可以使用,#include reg52.h #include intrins.h sbit K1 =P3^2 ; //增加键 sbit K2 =P3^3 ; //减少键 sbit BEEP =P3^1 ; //蜂鸣器 sbit pp =P3^7 ; unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /***********************************************
[单片机]
STM32 IAP应用编程几个要点
1关于ISP、ICP、IAP 1.ISP ISP:In System Programing,在系统编程。 比如:使用STC-ISP对STC芯片编程,利用Flash loader对STM32编程等。 支持ISP的芯片一般在芯片内部固化了一段(用ISP升级的)boot程序。 2.ICP In Circuit Programing,在电路编程。 ICSP:In-Circuit Serial Programming,在电路串行编程。如:对EEPROM编程等。 ICP编程方式网上各有说法,从字面含义(在电路)来说,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程
[单片机]
<font color='red'>STM32</font> IAP应用编程几个要点
STM32 三路AD的使用方法
void ADC_ChannelSelect(uint32_t ADChannel) { // ADC_ChannelConfTypeDef sConfig; sConfig.Channel = ADChannel; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;//ADC_RANK_CHANNEL_NUMBER;//1;//ADC_RANK_CHANNEL_NUMBER; sConfig.SamplingTime = ADC_SAMPLETIME_13CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_O
[单片机]
STM8学习笔记---普通IO口模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能。 要模拟串口首先要清楚串口数据传输过程中的原理。 常用的串口格式为 1位起始位,8位数据位,无校验位,1位结束位。起始位为低电平,结束位为高电平。数据0为低电平,数据1为高电平。 所以最简单的串口传输一个字节总共有10个电平变化,每个电平的宽度由波特率决定的。 具体的串口数据分析,可以参考这篇文章:STM8学习笔记---通过示波器分析串口数据。 下面看一个通过波特率如何计算每个位的电平宽度。 发送一个字节,以stm8中9600bit/s的波特率计算的过程为例(1秒钟传输
[单片机]
STM8<font color='red'>学习</font><font color='red'>笔记</font>---普通IO口模拟串口功能
STM32堆和栈(Heap & Stack)的资料理解
源起:在移植cjson的过程中,解析json包的时候发现动态内存分配不足而导致解析失败,为解决这一问题,而深入了解stm32的堆和栈。 stm32的存储器结构。 Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。FLASH存储下载的程序。SRAM是存储运行程序中的数据。 而SRAM一般分这几个部分: 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运
[单片机]
<font color='red'>STM32</font>堆和栈(Heap & Stack)的资料理解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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