本著述参考 FlexLua 官网 ,基于 FlexLua 脱离复杂单片机C开垦正安宁成为一种快速高效的 IoT 硬件开垦神气。让小白即使不懂单片机开垦也可很容易用FlexLua零门槛开垦各式 IoT 硬件。
一、收场功能本篇章以单通说念PWM输出步地演示了PWM波形动态变化用法,源代码收场了浮浅的呼吸灯演示。
详确:代码中并没推敲Led灯亮度和PWM脉宽的非线性干系,淌若需要作念出呼吸更均匀的呼吸灯,请参考 SBK006C2 《CIE1931 PWM LED亮度线性终结》著述,在这里就概略确盘考了。
二、PWM功能简介Core提供的PWM提供两种责任步地:
(1)单通说念输出步地,输出口固定在Core的D0口上,对应的库函数是:
LIB_PwmConfig1: 运升沉1个通说念的PWM LIB_PwmUpdate1: 更新PWM波形的占空比 LIB_PwmSetPrd1:更新PWM波形的周期以及占空比(2)三通说念同期输出步地,输出口固定在Core的D0,D1,D2上,对应的库函数是:
LIB_PwmConfig3: 运升沉3个通说念的PWM LIB_PwmUpdate3: 更新PWM波形的占空比 LIB_PwmSetPrd3:更新PWM波形的周期以及占空比三、接线图四、齐备代码--设立D0口为PWM功能,参数10000示意PWM的周期为10000us,参数0示意低电平灵验
LIB_PwmConfig1(10000,0)
--更新D0口的PWM输出占空比为0
LIB_PwmUpdate1(0)
cnt = 0
while(GC(1) == true)
do
LIB_DelayMs(10)
cnt = cnt + 50
--每10毫秒更新一次PWM占空值
LIB_PwmUpdate1(cnt)
if cnt >= 10000 then
cnt = 0
end买球的app软件下载安装IOS
end
--设立D0口为PWM功能,参数10000示意PWM的周期为10000us,参数0示意低电平灵验
LIB_PwmConfig1(10000,0)
--更新D0口的PWM输出占空比为0
LIB_PwmUpdate1(0)
cnt = 0
while(GC(1) == true)
do
LIB_DelayMs(10)
cnt = cnt + 50
--每10毫秒更新一次PWM占空值
LIB_PwmUpdate1(cnt)
if cnt >= 10000 then
cnt = 0
end
end
淌若感酷爱,上头代码中出现的LIB滥觞的库函数不错在 API文档 中通过Ctrl+F查询。
五、动态更新PWM周期LIBPwmSetPrdx(x=1或3)库函数复古及时蜿蜒PWM波形的周期和占空比,然而使用该函数时必须先运升沉过PWM,即调用过LIBPwmConfigx函数。另外LIB_PwmSetPrdx函数调用后,PWM的周期不会立时发生变化,而是比及该周期的PWM波形完成后才会奏效,何况在奏效的期间会有大要13us秒的期间PWM处于关闭情状,这个需要在盘算时有所推敲,实测失效波形图如下:
底下是一个示例代码:
--设立D0口为PWM功能,参数10000示意PWM的周期为10000us,参数0示意低电平灵验
LIB_PwmConfig1(10000,0)
--更新D0口的PWM输出占空比为0
LIB_PwmUpdate1(0)
while(GC(1) == true)
do
if something happen then
--更新PWM波形的周期为500us(2Khz),占空比为50%
LIB_PwmSetPrd1(500,250)
end
end
--设立D0口为PWM功能,参数10000示意PWM的周期为10000us,参数0示意低电平灵验
LIB_PwmConfig1(10000,0)
--更新D0口的PWM输出占空比为0
LIB_PwmUpdate1(0)
while(GC(1) == true)
do
if something happen then
--更新PWM波形的周期为500us(2Khz),占空比为50%
LIB_PwmSetPrd1(500,250)
end
end
空比D0口cnt库函数波形发布于:福建省声明:该文不雅点仅代表作家本东说念主,搜狐号系信息发布平台,搜狐仅提供信息存储空间处事。