【GoRK3288】5.PWM操作方法

请先在https://github.com/tjCFeng/GoRK3288下载
GoRK3288 开源库。

这一节来看看PWM的操作方法。前面说到了GPIO7_A1是个复用端口,包括GPIO和PWM,那么这次还是使用这个端口把它变成PWM输出。

还是来看这张图

可以发现PWM在前,GPIO在后,也就是说默认的功能为PWM。如果想使用PWM功能的话,上电后可以直接使用了。不过为了能更加清楚的说明它是个复用端口,可以在上一节作为GPIO使用后,不要断电或重启,可以重新配置为PWM功能再来使用,其他端口不论默认功能是什么,都是一样的操作方法。

再来看Test.go中的示例代码

即便当前是GPIO功能,也可以直接初始化为PWM的端口。在初始化时,可以不需要考虑端口,直接给定PWM的通道就可以了。因为手册是已经标明PWM1对应的就是GPIO7_A1。至于它到底是PWM还是GPIO,是通过Create类型来决定的,并且类中已经自动配置了复用设置寄存器,对用户完全透明,不用再去关心。

这个示例代码比较全,实际在使用时,如果不打算做太多的设置,可以直接指定周期和占空比,再用Start和Stop来控制启停,在不使用时别忘了释放端口。

同理,可以初始化其他的PWM来使用,如RK3288.PWM_2、RK3288.PWM_3等。不过PWM4不要使用,它已经被系统使用了,强行使用它会造成系统紊乱,需要重启系统恢复,有兴趣可以试一下:-)

需要注意的是,Start()开启的是一个协程,也就是说启动PWM后程序不会阻塞在Start()语句上,可以在PWM输出的时候继续执行其他的代码,互不影响。

还是使用上一节的测试方法,继续使用那个小板。这上面既有LED,也有蜂鸣器,都可以通过PWM来驱动

启动PWM后可以看到LED的闪烁或蜂鸣器的声音,不过这些都是动态的,没办法抓拍,就不放出照片了。

最后总结一下PWM类的方法:

CreatePWM:初始化PWM端口,需要指定通道

FreePWM:释放PWM

GetState:获取当前PWM是否已经启动

GetCNT:获取当前PWM的计数器

GetPERIOD:获取当前PWM被设置的周期数

GetDUTY:获取当前PWM的占空比周期数(不是百分比)

SetCNT:设置计数器,启动PWM之前最好设置为0

SetPERIOD:设置周期数

SetDUTY:设置占空比周期数

SetInactivePolarity:设置PWM启动时是高电平还是低电平

SetDutyPolarity:设置占空比的高低电平

Start:启动PWM

Stop:停止PWM

GoRK3288库请在https://github.com/tjCFeng/GoRK3288下载。

时间: 2024-07-31 00:51:02

【GoRK3288】5.PWM操作方法的相关文章

【GoRK3288】4.GPIO操作方法(2)

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. 上一节通过不靠谱的方法控制了WorkLED,那么对于一个具有功能复用的GPIO应该怎样操作呢?为了能够表达的更清楚一些,这次先不看代码,而是找一个具有代表性的端口来针对它说明. Firefly-RK3288有两排引出接口,从这里做文章吧 找来找去,发现GPIO7_A1这个口很好,是PWM和GPIO复用的端口,就对它下手. 由于它本身没有连接到任何地方,直接操作看不出效果,所以我翻箱倒柜找

【GoRK3288】6.TSADC操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. Rockchip RK3288中有好多ADC,HS-ADC(High Speed ADC).TS-ADC(Temperature Sensor ADC). 其中HS-ADC 主要用于传输数据,例如手册中说的GPS数据等:而TS-ADC顾名思义,就是采集各种温度传感器的数据了. 咱们先从简单的开始,所以想办法使用TS-ADC取得各种温度. 由于温度传感器是集成在CPU内部的,所以本次试验不

【GoRK3288】7.WatchDog操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. WatchDog在做服务器程序时很有用处,服务器在运行过程中,一旦发生死机.程序异常等情况,造成系统运行紊乱,可以通过WatchDog来自动控制整个系统重新启动,可以最大限度地减少人员维护的工作量. WatchDog也叫看门狗,它其实就是一个定时器,每隔一段时间检测一个标志位是否被程序赋值,即所谓的喂狗. 如果在某次检测中发现这个标志位没有被人为干预,那么意味着应用程序或系统不能正常运行

【GoRK3288】3.GPIO操作方法(1)

从这一节开始,正式讲述 GoRK3288 的使用方法.请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库 . 经过前两节的铺垫,大概了解了Go语言的结构,并且在开发板上每个功能都对应 GoRK3288 库中的一个文件,比如GPIO功能就是通过GPIO.go文件来实现的.而所有的示例代码都在上一层文件夹的Test.go中. 先来看Test.go中的第一段代码 func main() {} 函数前面的部分不用再重复叙述,从这个函数开始,是真正对

【GoRK3288】2.Go语法简要说明及GoRK3288结构

Go语言的语句很简单,写起来像是动态语言那样简单.不过虽说代码符号简单,但是刚刚接触的时候却是有些不适应,这里就先把使用 GoRK3288库 的时候需要用到的语法列举一下,其他高深的东西以后再去学习吧. 1.操作符: +.-.*./.%.&.|.^.<<.>>.==.!=.|= 等这些和C语言是一样的,不过在取反的时候就不是~符号了,而是^.跟亦或是同一个符号,怎么区分呢?单目操作是取反,双目操作是亦或.另外要将某一位置0的话 &= ^x是不对的,而是 &^

基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

CC1310生成PWM波

工作中因为时间紧迫,我不得不抛开TI提供的TI-RTOS.sdk和xdctools等工具,采用ucos + 库函数的方式去开发.最开始一头扎进去,碰见的就PWM的生成. PWM方面,TI自带封装好了PWM函数进行pwm的生成. 假如:我的需求是PWM的周期是2s,占空比50%,MCU主频是48MHz.于是我直接设置 params.periodUnits = PWM_PERIOD_US; params.periodValue = pwmPeriod; params.dutyUnits = PWM_

HAL之PWM

PWM是定时器的一个输出功能,要分配在有对应输出的管脚上.分频和定时值决定了周期,捕获寄存器的值就是占空比,当计数寄存器的值小于捕获值时输出固定电平(H),当大于时翻转电平,当计数器值溢出时将重载值载入,此时继续翻转电平. 一 在stm32cubeMX中线在有对应PWM输出的引脚设置PWM功能 二 在外设功能TIMx的对应通道上设置PWM模式 三在定时器配置时设置分频值,定时值,如果设置paulse则为固定pwm输出:或者这里不设置写一个设置函数,然后在while中不断修改paulse,则Pau

STM32定时器输出PWM频率和步进电机控制速度计算

1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知: 当APB1和APB