同步操作将从 Talkweb_OpenHarmony/Niobe 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本案例程序是演示PWM接口的基本使用,案例操作结果是点亮开发板上的LED灯,可以实现不断闪烁,类似LED灯在呼吸的效果。
本案例使用的LED灯根据开发板原理图可以得到,接入的是GPIO9号引脚。所以本次开发驱动的GPIO引脚是GPIO9。
LED灯在开发板的位置如下图红色框框标记所示:
IoTPwmInit函数是一个初始化PWM管脚的函数,函数返回初始化结果。此函数在管脚使用之前调用,避免重复调用,避在再中断中使用。
函数参数值传递需要使用到的引脚号,可选引脚参数有如下:
本次案例使用的是接入了GPIO9号引脚的LED,从芯片手册可以得知,GPIO9使用的是PWM0,所以本次使用HI_PWM_PORT_PWM0
作为参数。
IoTPwmStart函数根据输入参数输出PWM信号。可以实现控制引脚上的电压效果。
参数 | 描述 |
---|---|
port | PWM端口号 |
duty | 占空比 |
freq | 分频倍数 |
本案例程序是在之前的GPIO点灯案例的基础上继续增强实现的。本次控制GPIO引脚输出方式使用了PWM信号来实现,通过更改PWM的空占比,输出不同的PWM波形,进而更改GPIO引脚上的电平电压。
如下案例程序函数,主要是在while循环中不断对duty空占比进行加减运算。
static void *LedLightTask(const char *arg)
{
(void)arg;
printf("-----entry pwm demo -----\r\n");
IoTGpioInit(IOT_GPIO_IO_GPIO_9);
IoTIoSetFunc(IOT_GPIO_IO_GPIO_9, HI_IO_FUNC_GPIO_9_PWM0_OUT);
IoTGpioSetDir(IOT_GPIO_IO_GPIO_9, IOT_GPIO_DIR_OUT);
IoTPwmInit(HI_PWM_PORT_PWM0);
unsigned short duty = 0;
unsigned int freq = 15000;
static char plus_status = 0;
while (1)
{
if (duty >= 99)
{
plus_status = 0;
}
else if (duty <= 0)
{
plus_status = 1;
}
if (plus_status)
{
duty++;
}
else
{
duty--;
}
usleep(LED_INTERVAL_TIME_US);
IoTPwmStart(HI_PWM_PORT_PWM0, duty, freq);
}
return NULL;
}
修改 applications\app
路径下 BUILD.gn 文件,指定 pwm_led_example
参与编译。
# "TW001_OS_helloworld:helloworld",
#"TW002_OS_thread:os_thread_example",
#"TW003_OS_timer:os_timer_example",
#"TW004_OS_event:os_event_example",
#"TW005_OS_mutex:os_mutex_example",
#"TW006_OS_semp:os_semp_example",
#"TW007_OS_message:os_message_example",
#"TW101_GPIO_led:gpio_led_example",
#"TW102_EXTI_key:exti_key_example",
"TW103_PWM_led:pwm_led_example",
#"TW104_ADC_voltage:adc_voltage_example",
#"TW105_I2C_sht30:i2c_sht30_example",
#"TW106_UART:uart_example",
#"TW301_APP_oled:app_oled_example",
#"TW302_APP_nfc:app_nfc_example"
示例代码编译烧录代码后,按下开发板的RESET按键,开发板开始正常工作,此时LED会进入呼吸状态,LED亮度由弱变强,再由强变弱,不断循环。
按RESET前,需要用跳线帽短接左侧按钮上方的两组引脚,参考下图。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。