PWM输出
cubemx配置:
配置时钟和输出PWM模式:
注意,使用tim4时,这里要勾选使用内部时钟
配置PWM频率和极性:
这里讲解一下:
PWM频率 = 时钟频率/(分频系数 (prescaler)* 计数周期(counter period))
这里我的时钟是72M: 那么频率就是 : 72000000除以 (7199+1),再除以(99+1)。结果为100HZ。
配置PWM时钟:
先打开RCC中的高速时钟
设置HCLk时钟频率为72M,注意我们只需要设置hclk,别的时钟就会自动设置
启动PWM和设置占空比:
位置:
下面是我们启动pwm和设置pwm占空比的函数:
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 50);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 20);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
pwm占空比设置和极性设置讲解:
注意,我们怎么计算PWM的占空比,前面我们在配置PWM时,设置了计数周期和极性。
我们可以看到,两个PWM的极性不一样,
低极性:就是下图的黄色,一个周期里面,先是低电平,然后是高电平
高极性:就是下面的蓝色,先是高电平,然后是低电平
那么,设置占空比是什么意思了?
官方解释为,我们设置占空比,当计数器到了设置的占空比时就更换电平。
那么我们的占空比范围就是: 0 - 技术周期。 前面我们设置的是99,那么这里就是 0- 99+1。
总结:PWM在周期开始时是高电平还是低电平由极性决定。而,一个时间过后翻转电平,这个时间是占空比。但是,占空比必须小于计数周期。所以占空比的范围为0-技术周期
//这里将占空比设置为20,计数周期为99+1 =100,那么就是20%的时候反转电平,可以看到上面的蓝色波到达20%就反转了
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 20);
PWM输入模式:
注意这个模式是stm32提供的特殊的输入捕获模式:
pwm输入配置
打开中断:
打开输入中断:
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
编写回调函数:
/* 捕获回调函数 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
static uint32_t m_pulse;
// if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
// {
// /* 得到周期 */
// m_period = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);//低电平加高电平时间
// }
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
m_pulse = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2); //得到低电平的时间
printf("m_pulse is %dn",m_pulse);
//add_low_level(m_pulse, &RxData); //获取数据
}
}
结果:
输入结果计算:
注意,这里我们采用函数获取到的值是一个值,这个值是输入捕获寄存器里面的值。
这个值还需要经过计算而得来。
那么怎么计算了,注意我们之前设置分频系数了。
真实的测量值为: (预分频值/时钟频率) *获取到的;
比如说:预分频为 72 ,时钟为72000000,获取到20
那么实际检测到的时间为: (72 / 72000000)*20 = 20us。
上一篇:STM32+FreeRTOS+CUBEMX_学习笔记(四)按键输入
下一篇:STM32+FreeRTOS+CUBEMX_学习笔记(五)HAL串口终极总结
推荐阅读



推荐帖子
- STM32 中断的全局变量
- 在ccit.h中定义全局数组volatileuint8_tglobal[50]; it.c中引用了#include\'\'ccit.h" 然后再main.c中用externuint8_tglobal[50]; 这个数组是接收串口2的数据 在串口2第一次接收到PC数据为010203//OK 然后我改变PC机下发的数据改为ffff//但是这个全局数组里面接收的还是010203 为什么? 为什么再次改变之后就没变化了STM32中断的全局变量
-
duzhiming
stm32/stm8
- 谁知道有没有国产的以太网PHY芯片?
- 如题 谁知道有没有国产的以太网PHY芯片?
-
wulei19880906
单片机
- TI 狂欢+后双十一继续买买买的详细笔记
- 本帖最后由x1816于2017-11-1500:32编辑 TI的LanuchPad系列都是好东西,谁用谁知道~ 这次EEWorld联合TI搞了活动,当然是要买买买啦。 话不多说,活动链接奉上: http://bbs.eeworld.com.cn/huodong/TI_SimpleLink_201709/ 这里想买个CC3220SLaunchPad,原因其实很简单,这是支持WiFi开发的LaunchPad中最便宜的一款。 点击要买的开发板下面的“立即购买”按钮 来到了
-
x1816
无线连接
- 指纹模块识别
- 用51单片机设计zaz-101指纹模块的c程序指纹模块识别
-
liyuechong
51单片机
- 问一个无线模块发AT指令无响应的原因
- 有一个彩信模块,和主机串口连接 接电脑串口用时一切正常,波特率是115200 手头有一块arm开发板,彩信模块接arm的串口时,通过串口发at指令无反应,该开发板串口没问题,因为同样的那个串口,我外接一个普通的GPRS模块就一点问题都没有 串口线也没问题,另外我还编了个程序,在电脑linux系统下使用彩信模块,一切正常,但把该该程序移植到arm时,无响应,设备文件打开是正确的,波特率也是115200,其他的波特率也试过了,没用 因此可排除模块本身的问题、串口线的问题、开发板串口的问题。
-
jim_gao
嵌入式系统
- 【基于物联网的PLC】---为PLC主控烧写IIOT OS
- 第一步:选择国产工业物联网操作系统,选择对应的TF卡,点击烧录。第二步:等待烧写完成后,将TF卡插入树莓派。然后上电。第三步:通过局域网扫描得到树莓派IP地址。第四步:通过SSH登录树莓派,查看操作系统是否正常启动。启动成功,证明工业物联网操作系统烧写成功。 【基于物联网的PLC】---为PLC主控烧写IIOTOS
-
cpsiot
2022得捷电子创新设计大赛
实战 培训 开发板 精华推荐
最新视频课程更多
- 晒出我使用MSP430编译器的经验与技巧!
- 看Atmel SAM D MCUs专题视频,答题赢好礼
- 免费测评|涂鸦三明治Wi-Fi&BLE 开发板
- 辛苦一个月,EEWORLD社区3月明星人物出台喽!
- ADI有奖下载活动之21:ADI民用雷达解决方案
- Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿
- ADI学霸型讲师又来了,探讨MEMS传感器和工业设备的故障监测
- 技术直播:TI 60G毫米波传感器概述和应用介绍,种草封装了天线的智能传感器IWR6843
- 【EE团】ST最新STM32F429i高性能开发板重磅登场
- 下载有好礼!未来已来,你准备好了吗?益莱储5G白皮书!