2026/4/11 14:06:57
网站建设
项目流程
仿站工具箱网页版,互联网营销与管理,企业名称预先核准网上申请,建设银行造价咨询中心网站前言
继Zephyr学习之点亮LED文章。本次使用的示例工程blinky_pwm驱动的引脚为PF9
工程复制并打开项目 参考提供的设备树文件的PWM节点编写规则 找到我们这边使用的pf9对应的引脚定义 编写设备树覆盖配置文件
/ {// 选择系统控制台和 shell UART 设备chosen {// 指定系统控制…前言继Zephyr学习之点亮LED文章。本次使用的示例工程blinky_pwm驱动的引脚为PF9工程复制并打开项目参考提供的设备树文件的PWM节点编写规则找到我们这边使用的pf9对应的引脚定义编写设备树覆盖配置文件/{// 选择系统控制台和 shell UART 设备chosen{// 指定系统控制台使用 usart1zephyr,consoleusart1;// 指定 shell UART 使用 usart1zephyr,shell-uartusart1;};// GPIO LED 配置节点leds{// 兼容性字符串表示使用 GPIO LED 驱动compatiblegpio-leds;// 第一个 LED 配置led0:led0{// 配置 GPIO 引脚为 PF9GPIOF 端口第 9 号引脚高电平有效gpiosgpiof9GPIO_ACTIVE_HIGH;// PF9// 设置 LED 的标签名称labelUser LED0;};// 第二个 LED 配置led1:led1{// 配置 GPIO 引脚为 PF10GPIOF 端口第 10 号引脚高电平有效gpiosgpiof10GPIO_ACTIVE_HIGH;// PF10// 设置 LED 的标签名称labelUser LED1;};};// PWM LED 配置节点pwmleds{// 启用 PWM LED 设备statusokay;// 兼容性字符串表示使用 PWM LED 驱动compatiblepwm-leds;// PWM 控制的 LED 配置pwm_led0:pwm_led0{// 配置 PWM 属性引用 PWM 设备、通道号、周期、极性// pwm14: 引用 PWM 设备// 1: 使用通道 1// PWM_MSEC(100): 设置周期为 100 毫秒// PWM_POLARITY_INVERTED: 设置为反向极性pwmspwm141PWM_MSEC(100)PWM_POLARITY_INVERTED;// 设置 PWM LED 的标签名称labelPWM LED0;};};// 别名定义简化设备引用aliases{// 将 uart0 映射到 usart1uart0usart1;// 将 led0 映射到 led0led0led0;// 将 led1 映射到 led1led1led1;// 将 pwmled0 映射到 pwm_led0pwmled0pwm_led0;};};pinctrl{tim14_ch1_pf9:tim14_ch1_pf9{pinmuxSTM32_PINMUX(F,9,AF9);};};// 串口1usart1{pinctrl-0usart1_tx_pa9usart1_rx_pa10;pinctrl-namesdefault;current-speed115200;statusokay;};// 定时器timers14{statusokay;pwm14:pwm{statusokay;pinctrl-0tim14_ch1_pf9;pinctrl-namesdefault;};};注意编写测试函数/* * Copyright (c) 2016 Intel Corporation * Copyright (c) 2020 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 *//** * file Sample app to demonstrate PWM. */#includezephyr/kernel.h#includezephyr/sys/printk.h#includezephyr/device.h#includezephyr/drivers/pwm.h#includezephyr/drivers/gpio.h#includeautoconf.hstaticconststructpwm_dt_specpwm_led0PWM_DT_SPEC_GET(DT_ALIAS(pwmled0));intmain(void){uint32_tmax_period0;uint32_tperiod;uint8_tdir0U;intret;if(!pwm_is_ready_dt(pwm_led0)){printk(Error: PWM device %s is not ready\n,pwm_led0.dev-name);return0;}uint32_tpulse_width0;max_period1000;pwm_set_dt(pwm_led0,max_period,pulse_width);while(1){retpwm_set_dt(pwm_led0,max_period,pulse_width);if(ret){printk(Error %d: failed to set pulse width\n,ret);}printk(Using pulse_width %d\n,pulse_width);if(dir0){if(pulse_widthmax_period){pulse_width;}else{dir1;}}else{if(pulse_width0){pulse_width--;}else{dir0;}}k_sleep(K_MSEC(5U));}return0;}测试结果