| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32CubeMX——基本定时器、PWM、输入捕获、输出比较、互补式PWM等综合学习(STM32G431RBT6) -> 正文阅读 |
|
[嵌入式]STM32CubeMX——基本定时器、PWM、输入捕获、输出比较、互补式PWM等综合学习(STM32G431RBT6) |
可以在库中判断具体挂在哪个总线上:(stm32g4xx_hal_rcc.h)
我认为TIM6是挂在APB1上面的,所以是80MHz。 这里对TIM6进行配置: ?定时器的频率为80M/(79+1)/(999+1)=1KHz,即1ms一次中断。 这里对于这个Trigger Event Selection不懂。 基本定时器的功能函数(轮询、中断、DMA)? 我先学习中断处理: 1.在main函数中开启中断:
2.重新定义回调函数并添加自己想要实现的功能(我只用LED闪烁简单测试):
或者在stm32G431RB数据手册中寻找 block diagram(框图) TIM15挂在APB2上:? ?同样开启中断、代码相似。自动生成tim.h和tim.c文件:
在main函数中:
?自己编写对应的函数中断:
if中也可以使用htim->Instance == htim1.Instance?例如这里:if(htim->Instance==htim15.Instance) ?对于instance在TIM的定义中可以看到:(可以区分进入中断的不同定时器)
?PWM配置: 图片来自B站UP:PetraKing ?详细自动重装载见:自动重装载详解 频率的计算是一样的,pwm占空比的设置是Pulse/Counter Period计算的。 ? ?初始化只需要在main函数中添加:
或者:(IT:interruption中断)要对应打开嵌套向量中断控制器
这里对优先级不配置:有需要的可以配置 。 更改PWM的频率和占空比: ?通过以上可知,PWM的占空比改变的是CCR寄存器的值(不同通道对应不同的CCR),频率的改变对应的是ARR寄存器的值,也就是下图? ?至于CCR寄存器,我们可以看到初始化中,在sConfigOC.Pulse赋值给我们想要的值。 ?而在HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1)的定义中,我们能找到?TIM_OC1_SetConfig(htim->Instance, sConfig);类似的函数,而这个函数中的定义中, ?就能找到实际把Pulse的值给了TIM的CCR寄存器。
?所以就可以通过这两个来改变占空比和周期(频率)。 PWM互补输出: 用不到,先暂时不学:?互补输出配置示例 输出比较实现PWM:Out Compare模式 ?图片来自B站UP:PetraKing ?左边是通用定时器,只有一个自动重装载(ARR),但是有多个CCR,所以同一个定时器下面的通道只有一个频率,但是可以有多个占空比。 上图为详细的原理,讲的很清楚,如果看不懂的话建议找一下这个up的视频看一看。 具体配置: ?这里大概说一下自己的看法:中断是肯定要打开的,因为要不断改CCR的值,这里的预分配和你想写的pulse决定了频率,所以这个ARR是没有用的,至于自动重装载还是打开吧,不然会有什么bug吧,我这里预分频后是80M/8000=10Khz,我想配置的500个的高电平和300个低电平,那么总共是800个,实际的频率就是(800/10k)hz。 具体程序:
__HAL_TIM_GET_COMPARE也是一个宏定义。? 等价于 :??HAL_TIM_ReadCapturedValue(&htim5,TIM_CHANNEL_1);
?如果不清楚这if怎么写,可以去定义里面找: 去找TIM_HandleTypeDef的定义: 再去找HAL_TIM_ActiveChannel的定义:(就找到了)(枚举) ? 没有示波器,只用万用表简单测试了一下,感觉电压差不多,然后再去找示波器看一下吧,主要是STM32G431RB好像KEIL不支持它的虚拟示波器,我也没逻辑测试仪,然后看玩再放图吧。 ?输入捕获模式:? 输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉 1.普通捕获: ?main函数中:
输入捕获的中断回调函数:?
?读出当前计数值,清空,频率就是之前配置的80M/(79+1)/__HAL_TIM_GET_COUNTER() 2.PWM输入模式(输入捕获的一种特殊形式): ?在main函数中:
?在中断回调函数中:
由此读出来PWM_count1是总周期数,PWM_count2是低电平数?。 ?我认为input capture direct mode是读取整个周期的,把他设置为上升沿就会在高电平来到时触发,input capture indirect mode则也同时开始,然后再下降沿到来时停止计数,而前一个则一直计算到下一个上升沿。(最后结果都需要加1). 剩下还有很多不会的不理解的,以后慢慢加深学习吧。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:35:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |