当前位置: 首页 > news >正文

【经验】STM32的一些细节

这两天 碰到的奇葩问题是 STM32定时器同步的问题。

我的设计本意是:使用定时器T3以100us的周期来定时发送命令给 FPGA。由于编码器出结果的最长时间为51us。因此,希望PWM中断要滞后于T3 约60us 。

调试过程:分别在T3和PWM中断中置IO1, IO2. 观察波形,发现IO1和IO2的周期都对,但相位差不固定,一直在变动。

百思不得其解。。。

后来,尝试用T2和T3来测试。发现相位是固定的,原来T2和T3的时钟来源是APB1 ,而T1的时钟来源是 APB2 。差异就在这里。

T8用的时钟是APB2.

改T3为T8, 相位差还是飘动。把T8由向上计数 也改成 和T1一样(中央对齐模式),这个时候相位差固定,但由之前的 55us 上升到78us 。估计和清中断标志有关。

关于中断优先级:

1. 中断优先级能分组,但只需要分一次确定下来即可,而不是分多次。若是分2组,则抢占优先级可以有0—3 这4个级别。

函数:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_IRQChannelPreemptionPriority 抢占优先级,越小优先级越高

NVIC_IRQChannelSubPriority 副优先级,越小优先级越高

2. 高抢占优先级能 打断 低抢占优先级。同一抢占优先级的中断不能相互打断。

还有一个比较坑爹的情况:在调试外部中断时,怎么也进不了中断。后来查明的原因是 PE6引脚对应的中断源 为 EXTI9_5 。

大量细节都隐藏在手册里。

 

http://www.lryc.cn/news/300370.html

相关文章:

  • ubuntu22.04安装部署03: 设置root密码
  • 【lesson56】生产者消费者模型
  • MySQL5.7升级到MySQL8.0的最佳实践分享
  • Rust 数据结构与算法:5栈:用栈实现前缀、中缀、后缀表达式
  • 作业day6
  • 前方预警!2024年七大网络安全威胁
  • 绿色化 数据库 MongoDB 和 mysql 安装
  • npm install 一直卡着不动如何解决
  • 电路设计(15)——篮球赛24秒违例倒计时报警器的proteus仿真
  • golang 集成sentry:http.Client
  • 设计链表(不难,代码稍微多一点)
  • [GXYCTF2019]禁止套娃
  • ubuntu下如何查看显卡及显卡驱动
  • 【图论经典题目讲解】CF786B - Legacy 一道线段树优化建图的经典题目
  • 【AIGC】Stable Diffusion的采样器入门
  • 【Python】通过conda安装Python的IDE
  • 基于HTML5实现动态烟花秀效果(含音效和文字)实战
  • 「数据结构」栈和队列
  • 【机器学习笔记】5 机器学习实践
  • C++ //练习 7.5 在你的Person类中提供一些操作使其能够返回姓名和住址。这些函数是否应该是const的呢?解释原因。
  • python系统学习Day2
  • 学习笔记——ENM模拟
  • 数值类型的运算方式总结
  • 【Redis快速入门】Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)
  • [嵌入式系统-14]:常见实时嵌入式操作系统比较:RT-Thread、uC/OS-II和FreeRTOS、Linux
  • 基于AI Agent探讨:安全领域下的AI应用范式
  • Stable Diffusion 模型下载:ToonYou(平涂卡通)
  • 机器学习:分类决策树(Python)
  • 红队打靶练习:HACK ME PLEASE: 1
  • 《VulnHub》GoldenEye:1