【单片机学习笔记】(24):通用定时器输出PWM,输入捕获,电容按键

定时器

高级控制定时器时基单元包含一个 16 位自动重装载寄存器 ARR,一个 16 位的计数器 CNT,可向上/下计数,一个 16 位可编程预分频器 PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。还有一个 8 位的重复计数器 RCR,这样最高可实现 40 位的可编程定时。

PWM模式1

向上计数时,计数值小于比较值时输出有效电平。计数值大于比较值时输出无效电平。

向下计数时,计数值大于比较值时输出有效电平。计数值小于比较值时输出无效电平。

PWM模式2与PWM模式1输出电平相反。

死区是防止上下管同时导通导致故障的设置

互补输出通道是在不同的引脚上输出的

用通用定时器3输出PWM控制led

使用PWM时要记得把auto-reload preload给勾上即auto-reload preload enable

为保证系统响应时间,尽量不要使用阻塞操作

HAL库也有清除中断标志位的函数,只不过不在Callback函数里面,而是在HAL_TIM_IRQHandler()函数里面:

TIM_SetTIM3Compare2(u32 compare)

{

       TIM3—>CCR2 = compare;

}

HAL库中没有提供独立的修改占空比的函数的话,可以用正点的自定以函数的方法,

也可以用__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, val)  的方式来修改

暂时把HAL中提供的函数中前面带有下划线的都当成是对寄存器的直接修改。

不在GPIO那里设置的话,modified不会勾上

Multiply 乘 / 使相乘 / 增加 / 使繁殖

报错报出Multiply define 一般就是重复定义了

下面这个是后来发现的

如果在中断中使用了systick的HAL_delay(),并且该中断优先级比systick的优先级高,那么systick里面的数值将不会变化,直接卡死在里面

仿真时用逻辑分析仪前,要把debug选项里的DLL配置好吗?

或者直接用软件仿真看看波形

cubeMX不会自动启动(start)某一功能,或清除(clear)某一标志位,基本都需要用户来编写

输入捕获

正点原子的输入捕获例程,最大的值是65536*64 -1= 4194304-1.

超过这个值也就在串口上显示最大值

下面是网上的一个教程

STM32CubeMX学习笔记(23)——通用定时器接口使用(输入捕获测量脉宽)_Leung的博客-CSDN博客

滤波

在cubeMX的code generrator上设置拉所有的库文件来生成新工程,那么在drivers文件夹里就会有所有hal的驱动(记得把里面的带template字样的文件移除就好)

之后移植什么模块也要记得在main.c的stm32f1xx_hal_conf.h把要用到的功能的注释给取消掉。

触摸电容实验

遇到下载出问题可以试试下面的方法

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值