定时器
高级控制定时器时基单元包含一个 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上把要用到的功能的注释给取消掉。
触摸电容实验
遇到下载出问题可以试试下面的方法