OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5029|回复: 4

潘多拉PE9做TIM CH1 PWM输出无反应

[复制链接]

2

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-3-28
在线时间
36 小时
发表于 2019-8-28 13:22:50 | 显示全部楼层 |阅读模式
2金钱

1、cube配置,生成代码

2、修改kconfig文件

3、env配置PWM1 CH1

4、修改驱动

5、代码例程
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#define PWM_DEV_NAME            "pwm1"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL         1       /* PWM通道 */
#define THREAD_PRIORITY         25      /* 线程优先级 */
#define THREAD_STACK_SIZE       512     /* 线程栈大小 */
#define THREAD_TIMESLICE        5       /* 线程时间片大小 */

static rt_thread_t tid1 = RT_NULL;      /* 线程句柄 */
struct rt_device_pwm *pwm_dev;          /* PWM设备句柄 */
static rt_uint32_t period = 500000;     /* 周期为0.5ms,单位为纳秒ns */
static rt_uint32_t pulse =  250000;           /* PWM脉冲宽度值的增减方向 */

/* 线程 pwm_entry 的入口函数 */
static void pwm_entry(void *parameter)
{
    rt_uint32_t count = 0;

    while (1)
    {
        rt_thread_mdelay(50);
        /* step 2、设置 PWM 周期和脉冲宽度,输出特定的波形 */
        rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse++);
    }
    /* step 3、如果不再使用该通道,可以关闭 PWM 通道的输出 */
   // rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);
}

static int pwm_test(int argc, char *argv[])
{
    /* step 1.1、查找 PWM 设备 */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    if (pwm_dev == RT_NULL)
    {
        rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
        return RT_ERROR;
    }

    /* step 1.2、设置 PWM 周期和脉冲宽度默认值 */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
    /* step 1.3、使能 PWM 设备的输出通道 */
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);

    /* 创建线程,名称是 pwm_thread ,入口是 pwm_entry*/
    tid1 = rt_thread_create("pwm_thread",
                             pwm_entry,
                             RT_NULL,
                             THREAD_STACK_SIZE,
                             THREAD_PRIORITY,
                             THREAD_TIMESLICE);

    /* 如果获得线程控制块,启动这个线程 */
    if (tid1 != RT_NULL)
        rt_thread_startup(tid1);

    return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pwm_test, pwm sample);



6、实验结果
发送list_device  查询有PWM1驱动
发送pwm_test 找到PWM 但设置输出无反应


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-8-29 02:23:51 | 显示全部楼层
回复

使用道具 举报

5

主题

63

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-6-15
在线时间
28 小时
发表于 2019-9-3 09:27:27 | 显示全部楼层
你怕是 cubemx 时钟没有初始化吧
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-9-3
在线时间
7 小时
发表于 2019-9-3 14:22:08 | 显示全部楼层
楼主看下这个能否解决 :在rtt官网有个文档:应用开发 &#187; STM32 上使用 PWM
回复

使用道具 举报

0

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2019-9-5
在线时间
67 小时
发表于 2020-7-31 10:30:21 | 显示全部楼层
CubeMx中配置PWM的TIM定时器不要选择内部时钟源,即Clock Source选择Disable,另外再手动调用MX_TIMx_Init()函数来重新初始化PWM定时器。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 13:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表