1717#include <rtthread.h>
1818#include <rtdevice.h>
1919
20- /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
21- #define LED_PIN_NUM 57
22- #define PWM_DEV_NAME "pwm3"
23- #define PWM_DEV_CHANNEL 4
20+ #define LED_PIN_NUM 57 /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
21+ #define PWM_DEV_NAME "pwm3" /* PWM设备名称 */
22+ #define PWM_DEV_CHANNEL 4 /* PWM通道 */
2423
25- struct rt_device_pwm * pwm_dev ;
24+ struct rt_device_pwm * pwm_dev ; /* PWM设备句柄 */
2625
27- static void pwm_led_entry ( void * parameter )
26+ static int pwm_led_sample ( int argc , char * argv [] )
2827{
2928 rt_uint32_t period , pulse , dir ;
3029
3130 period = 500000 ; /* 周期为0.5ms,单位为纳秒ns */
3231 dir = 1 ; /* PWM脉冲宽度值的增减方向 */
3332 pulse = 0 ; /* PWM脉冲宽度值,单位为纳秒ns */
3433
34+ /* 设置LED引脚脚模式为输出 */
35+ rt_pin_mode (LED_PIN_NUM , PIN_MODE_OUTPUT );
36+ /* 拉高LED引脚 */
37+ rt_pin_write (LED_PIN_NUM , PIN_HIGH );
38+
39+ /* 查找设备 */
40+ pwm_dev = (struct rt_device_pwm * )rt_device_find (PWM_DEV_NAME );
41+ if (pwm_dev == RT_NULL )
42+ {
43+ rt_kprintf ("pwm sample run failed! can't find %s device!\n" , PWM_DEV_NAME );
44+ return RT_ERROR ;
45+ }
46+
47+ /* 设置PWM周期和脉冲宽度默认值 */
48+ rt_pwm_set (pwm_dev , PWM_DEV_CHANNEL , period , pulse );
49+ /* 使能设备 */
50+ rt_pwm_enable (pwm_dev , PWM_DEV_CHANNEL );
51+
3552 while (1 )
3653 {
3754 rt_thread_mdelay (50 );
@@ -56,39 +73,5 @@ static void pwm_led_entry(void *parameter)
5673 rt_pwm_set (pwm_dev , PWM_DEV_CHANNEL , period , pulse );
5774 }
5875}
59-
60- static int pwm_led_sample (int argc , char * argv [])
61- {
62- rt_thread_t tid ;
63-
64- /* 设置LED引脚脚模式为输出 */
65- rt_pin_mode (LED_PIN_NUM , PIN_MODE_OUTPUT );
66- /* 拉高LED引脚 */
67- rt_pin_write (LED_PIN_NUM , PIN_HIGH );
68-
69- /* 查找设备 */
70- pwm_dev = (struct rt_device_pwm * )rt_device_find (PWM_DEV_NAME );
71- if (pwm_dev == RT_NULL )
72- {
73- rt_kprintf ("pwm sample run failed! can't find %s device!\n" , PWM_DEV_NAME );
74- return RT_ERROR ;
75- }
76-
77- /* 使能设备 */
78- rt_pwm_enable (pwm_dev , PWM_DEV_CHANNEL );
79-
80- tid = rt_thread_create ("pwm" ,
81- pwm_led_entry ,
82- RT_NULL ,
83- 512 ,
84- RT_THREAD_PRIORITY_MAX / 3 ,
85- 20 );
86- if (tid != RT_NULL )
87- {
88- rt_thread_startup (tid );
89- }
90-
91- return RT_EOK ;
92- }
9376/* 导出到 msh 命令列表中 */
94- MSH_CMD_EXPORT (pwm_led_sample , pwm sample );
77+ MSH_CMD_EXPORT (pwm_led_sample , pwm sample );
0 commit comments