尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
深入学习stm32hal定时器1
1.清除MOE什么是MOEMOE是main output是高级定时器如 STM32 中的 TIM1、TIM8特有的一个安全控制机制它由BDTR断路和死区寄存器中的 MOE 位Main Output Enable控制。主输出Main Output是定时器输出真正生效的“总开关”。哪怕你已经配置了 PWM 模式启用了通道CCx、CCxN设置好了比较值如果MOE 位没打开输出引脚还是不会输出任何波形。总结关闭MOE有两种方式第一种是通过宏__HAL_TIM_MOE_DISABLE来进行手动关闭前提是四个通道输出已经关闭才行。第二种是硬件关闭。// 配置 TIMx 的 Break 输入引入外部保护信号如过流检测电路输出TIMx-BDTR | TIM_BDTR_BKE; // 使能 Break这样一旦故障信号到来MOE 自动清零所有PWM关闭比你代码中判断再清除更快、更安全。2.HAL_TIM_OC_Stop和HAL_TIM_PWM_Stop得区别PWM不也属于OC得范畴嘛通过源代码来进行判断两者函数内部实现完全是一致的3.函数HAL_TIM_PWM_Stop内部有一行代码__HAL_TIM_DISABLE按道理应该只关闭一个通道这行代码的作用是关闭整个TIM外设真的起这个作用吗测试结果不会关闭整个外设只会关闭对应的通道输出HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel){/* Check the parameters */assert_param(IS_TIM_CCX_INSTANCE(htim-Instance, Channel));/* Disable the Capture compare channel */TIM_CCxChannelCmd(htim-Instance, Channel, TIM_CCx_DISABLE);if (IS_TIM_BREAK_INSTANCE(htim-Instance) ! RESET){/* Disable the Main Output */__HAL_TIM_MOE_DISABLE(htim);}/* Disable the Peripheral */__HAL_TIM_DISABLE(htim);/* Set the TIM channel state */TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);/* Return function status */return HAL_OK;}这是关闭某个通道PWM输出的函数代码我有一个问题他的用处应该是关闭其中一个通道但是内部有一个代码__HAL_TIM_DISABLE这是关闭整个定时器这合理嘛按道理应该是关闭整个tim1外设但是实际测试结果是仅仅关闭PA7和PA9PA8和PB0正常输出PWM。猜测如果有其他通道在运行那么就只关闭当前通道而不关闭整个外设还真是下图中的英文注释意思是只有当所有 CCx 和 CCxN 通道均已被禁用时定时器实例的计数器才会被禁用。下面尝试强制输出和GPT描述的是一样的对于一对互补输出的PWM通道无法使其一个通道输出PWM另一个互补通道强制输出低电平或者高电平。如注释所示TIM_OCMODE_FORCED_ACTIVE强制输出高电平结果是CH1主通道输出高电平互补通道输出低电平。强制输出高低电平体现在主通道上。因此如果想要实现互补的通道一个输出PWM一个强制输出高低电平的话想要初始化该互补通道引脚为GPIO才行有点麻烦挺有意思的TIM_OCMODE_FORCED_ACTIVE首先是控制主通道输出高电平互补通道输出低电平。如果你关闭主通道只开着互补通道那么TIM_OCMODE_FORCED_ACTIVE就会控制互补通道输出高电平主打一个得控制输出高电平4.如何设置单脉冲和逆变信号周期的个数通过更新中断来实现在更新中断里面进行计数每进入一次中断代表生成一个PWM次数达到目标次数后关闭5.验证tim1关闭PWM输出时和强制输出低电平时的adc采集值分别是多少估计一个是浮空一个是0。测试结果如下adc采集强制高电平时为3.281adc采集强制低电平时为0.002adc采集pwm关闭输出时采集值任意接与不接pwm输出引脚采集值不变化6.HAL_TIM_PeriodElapsedCallback更新中断产生后会调用这个回调函数这么多的中断回调函数什么时候会被调用呢先放着7.记录HAL_SET_Compare设置倍数占空比变化急剧的原因Single_Pulse(1000,100,10);//PWM周期是1000us脉冲宽度是100us那么占空比是10%打印信息如下说明是没有问题得可是脉冲宽度极小Period: 1000 us, Pulse: 100 us, Prescaler: 79, CCR: 100, Count: 10没有错误占空比10%有点太小了一开始没有反应过来。后续直接*10占空比变为100%又变成没有低电平8.开启定时器中断__HAL_TIM_ENABLE_IT和__HAL_TIM_ENABLE的摆放顺序解决__HAL_TIM_ENABLE_IT应该放在__HAL_TIM_ENABLE前面。原因逻辑上合理确保中断逻辑已经配置完毕即中断服务函数、优先级、标记清楚都准备好再启动定时器9.在中断里面printf(single pulse)没有输出但是我在里面置位debug变量然后在while中进行debug判断并进行打印。疑问为什么在中断中打印不出信息呢很奇怪9.控制TIM1两对互补通道输出互补两对互补PWM信号时只有输出一对互补的PWM信号还有一对只能输出高低电平。原因没有设置通道2的CCR即没有加上红框代码导致一直输出高电平因为这段代码是直接复制的单脉冲生成函数单脉冲函数里面只用到通道1没用到通道2没注意。我一开始以为是单脉冲函数里面的强制CH2-PWM2B输出低电平导致的后来排除掉这个可能10._HAL_TIM_DISABLE(htim6)和HAL_TIM_Base_Stop_IT(htim6);有啥区别HAL_TIM_Base_Stop_IT是停止定时器计数并且关闭中断属于完全关闭_HAL_TIM_DISABLE是仅仅停止定时器计数不关闭中断这适合暂停一下定时器后续接着使用11.记录一下玄学问题Nucleo-L432KC开发板第一次插到电脑上时是不能正常工作的体现在昨天可以正常运行的程序今天再次烧录就出不了现象并且连基本的GPIO点亮LED都没有正常点亮重新插拔之后就可以正常运行了LED也被正常点亮12.使用中断加状态机输出指定的PMW波形这个波形的下降沿十分缓慢呈现45度夹角我不是理解因为我直接在while循环里面测试是很好的占空比为50%的方波13.用于启动定时器传进来的参数必须大于1否则无法开启中断GPT解释但是没有看文档具体验证应该是这样吧。确实没注意这个细节卡了一些时间14.遇到一个不算是bug的情况但我以为是一个bug生成逆变单脉冲时需要1A和2B2A和1B交替导通一小段可自定义的时长于是我便让定时器1A引脚输出测试波形一看波形周期是对的但是会有一段很长的下降沿我以为他是电压下降的太慢导致的后续测试应该是处于关闭状态电压处于floating状态不用担心不是一个bug第二个玄学问题TIM1-CH2的强制通道输出引脚没有效果一直都是高电平或者低电平切换强制高低电平没有效果我不是很理解我将输出通道改为ch1就可以进行强制电平翻转改为ch2就不行真玄学我打算先将pwm输出引脚转换为普通的gpio引脚来进行控制等后续有时间再尝试tim1-ch2的强制电平翻转真的是有趣哇核心先把结果搞出来不要顾及太多15.定时器计数问题TIM6_Init2可以运行会每1us执行一次中断。TIM6_Init1就不会触发中断16.下午查原因为什么其他指令不回复原因校验码计算错误不是只有四个字节相加而是19个字节相加只是之前是因为大部分字节是00。但是没有解决问题很奇怪还是遇到玄学问题勒。原因是对应的指令没有开启led翻转emmm解决下位机接收到数据都是1和0的问题emmm服了||和|没分清楚前者是逻辑运算后者是bit运算两码事
RELATED

相关推荐

TicketHunter Pro(票务猎手)

TicketHunter Pro(票务猎手)

演唱会门票秒没,黄牛加价数倍,这是每个粉丝都经历过的痛。**TicketHunter Pro(票务猎手)** —— 票务监控与协议系统。本文将分享这个项目背后的技术思路与实现细节。> 声明:本文及项目仅供技术研究和学习使用&…

📅 2026/10/25 1:19:06
cv610_cv608串口烧录固件,需要上拉soc_Pin52_FAST_BOOT_MODE脚

cv610_cv608串口烧录固件,需要上拉soc_Pin52_FAST_BOOT_MODE脚

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/25 1:19:06
Keil Debug调试心得

Keil Debug调试心得

下面这个问题是基于程序6-12libmodbus_all_uart来实现的1.在keil中监控局部变量,必须在该函数内部断点进行访问,不然是访问不到这个变量的实际内容的所以目前问题,进一步定位在,为什么信号量无法正确的创建,好无奈的&a…

📅 2026/10/25 1:19:06
MORE NEWS

更多资讯

📰

数学物理计算题批改:公式识别与步骤给分技术

数学和物理计算题是AI阅卷中技术难度最高的题型之一。不像选择题有唯一答案,计算题需要识别手写公式、理解解题步骤、按评分标准给分。本文拆解这个技术链路。 一、手写公式识别的特殊之处 普通文字OCR识别的是一维线性文本,但数学公式是二维结构。一个分…

📰

内容运营的终局:从流量生产者到语义资产配置者

【摘要】AI时代决策入口迁移正在重构内容行业的价值体系。这套框架覆盖4类存量内容症状、4步选题约束法、5维质量打分模型、3层结构化标准、3类典型误区,帮助从业者完成从流量执行者到资产经营者的能力升级,实现内容获客成本30%以上的长期下降。核心关键…

📰

面试问题总结

1.回答输出结果,为什么?Integer i new Integer(100);Integer j new Integer(100);System.out.println(i j);String a "abc";String b "a" "b" "c";System.out.println(a b);String c "abcd"…

📰

【Linux网络加餐】《HTTP 会话保持:Cookie 与 Session 原理及实验验证》---详解

一.HTTP 会话保持1.Cookie HTTP 的特征如下:简单快捷无连接无状态HTTP 本身是无状态协议:协议层面不会保存客户端的历史访问信息,每一次 HTTP 请求都是独立的,服务器收到单次请求时,默认不知道这个请求来自哪个用户、之…

📰

2026年毕业设计相关信息

01 毕业设计学生信息基本信息 学生1 ### 学生2### 学生2 卓老师,想问您今年还有本科毕设名额吗? 我是自动化2023级本科生曾天怀(自34班),之前大二的时候上过您的信号与系统课,想要在您的指导下完成毕设。 在…

📰

RE转换为NFA:Thompson算法

RE转换为NFA:Thompson算法词法分析器生成器接受RE作为输入,并将RE转换为NFA,再将NFA转换为DFA,进一步处理得到词法分析器代码。 Thompson算法思想 它是一个递归算法:考虑下面正则表达式的基本形式:前面两种…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬