OpenEdv-开源电子网

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

STM32F407 寄存器版本的的PWM也输不出PWM波形

[复制链接]

332

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1547
金钱
1547
注册时间
2014-7-11
在线时间
256 小时
发表于 2024-2-28 22:25:48 | 显示全部楼层 |阅读模式
3金钱
原子哥,我用STM32F407寄存器版本输出PWNM,也输不出PWM波形
#define PWMDAC_GPIO_PORT                    GPIOA
#define PWMDAC_GPIO_PIN1                     SYS_GPIO_PIN6
#define PWMDAC_GPIO_AF                      1                                       // AF1|ÄüÑ¡Ôñ
#define PWMDAC_GPIO_CLK_ENABLE1()            do{ RCC->AHB1ENR |= 1 << 0; }while(0)   // PA&#191;úê±&#214;óê1&#196;ü

#define PWMDAC_TIMX                         TIM3
#define PWMDAC_TIMX_CHY1                     1                           // í¨μàY,  1<= Y <=4
#define PWMDAC_TIMX_CCRX1                    PWMDAC_TIMX->CCR1           // í¨μàYμ&#196;ê&#228;3&#246;±è&#189;&#207;&#188;&#196;′&#230;&#198;÷
#define PWMDAC_TIMX_CLK_ENABLE1()            do{ RCC->APB1ENR |= 1 << 0; }while(0)   // TIM2 ê±&#214;óê1&#196;ü

#define PWMDAC_GPIO_PORT                    GPIOA
#define PWMDAC_GPIO_PIN2                     SYS_GPIO_PIN7
#define PWMDAC_GPIO_AF                      1                                       // AF1|&#196;ü&#209;&#161;&#212;&#241;
#define PWMDAC_GPIO_CLK_ENABLE2()            do{ RCC->AHB1ENR |= 1 << 0; }while(0)   // PA&#191;úê±&#214;óê1&#196;ü

#define PWMDAC_TIMX                         TIM3
#define PWMDAC_TIMX_CHY2                     2                           // í¨μàY,  1<= Y <=4
#define PWMDAC_TIMX_CCRX2                    PWMDAC_TIMX->CCR2           // í¨μàYμ&#196;ê&#228;3&#246;±è&#189;&#207;&#188;&#196;′&#230;&#198;÷
#define PWMDAC_TIMX_CLK_ENABLE2()            do{ RCC->APB1ENR |= 1 << 0; }while(0)   // TIM2 ê±&#214;óê1&#196;ü



void pwmdac_init(uint16_t arr, uint16_t psc)
{
    uint8_t chy = PWMDAC_TIMX_CHY1;
    PWMDAC_GPIO_CLK_ENABLE1();       /* PWM DAC GPIO ê±&#214;óê1&#196;ü */
    PWMDAC_TIMX_CLK_ENABLE1();       /* PWM DAC &#182;¨ê±&#198;÷ê±&#214;óê1&#196;ü */
                PWMDAC_GPIO_CLK_ENABLE2();       /* PWM DAC GPIO ê±&#214;óê1&#196;ü */
    PWMDAC_TIMX_CLK_ENABLE2();       /* PWM DAC &#182;¨ê±&#198;÷ê±&#214;óê1&#196;ü */


    sys_gpio_set(PWMDAC_GPIO_PORT, PWMDAC_GPIO_PIN1,
                 SYS_GPIO_MODE_AF, SYS_GPIO_OTYPE_PP, SYS_GPIO_SPEED_HIGH, SYS_GPIO_PUPD_PU);    /* TIMX PWM CHY òy&#189;&#197;&#196;£ê&#189;éè&#214;&#195; */

    sys_gpio_af_set(PWMDAC_GPIO_PORT, PWMDAC_GPIO_PIN1, PWMDAC_GPIO_AF); /* IO&#191;ú&#184;′ó&#195;1|&#196;ü&#209;&#161;&#212;&#241; ±&#216;D&#235;éè&#214;&#195;&#182;&#212;!! */
               
                 sys_gpio_set(PWMDAC_GPIO_PORT, PWMDAC_GPIO_PIN2,
                 SYS_GPIO_MODE_AF, SYS_GPIO_OTYPE_PP, SYS_GPIO_SPEED_HIGH, SYS_GPIO_PUPD_PU);    /* TIMX PWM CHY òy&#189;&#197;&#196;£ê&#189;éè&#214;&#195; */

    sys_gpio_af_set(PWMDAC_GPIO_PORT, PWMDAC_GPIO_PIN2, PWMDAC_GPIO_AF); /* IO&#191;ú&#184;′ó&#195;1|&#196;ü&#209;&#161;&#212;&#241; ±&#216;D&#235;éè&#214;&#195;&#182;&#212;!! */

    PWMDAC_TIMX->ARR = arr;         /* éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ */
    PWMDAC_TIMX->SC = psc;         /* éè&#214;&#195;&#212;¤·&#214;&#198;μ&#198;÷  */
    PWMDAC_TIMX->BDTR |= 1 << 15;   /* ê1&#196;üMOE&#206;&#187;(&#189;&#246;TIM1/8 óD′&#203;&#188;&#196;′&#230;&#198;÷,±&#216;D&#235;éè&#214;&#195;MOE2&#197;&#196;üê&#228;3&#246WM), &#198;&#228;&#203;&#251;í¨ó&#195;&#182;¨ê±&#198;÷, &#213;a&#184;&#246;
                                     * &#188;&#196;′&#230;&#198;÷ê&#199;&#206;TD§μ&#196;, &#203;ùò&#212;éè&#214;&#195;/2&#187;éè&#214;&#195;2¢2&#187;ó°&#207;ì&#189;á1&#251;, &#206;aá&#203;&#188;&#230;èY&#213;aà&#239;í3ò&#187;&#184;&#196;3ééè&#214;&#195;MOE&#206;&#187;
                                     */

    if (chy <= 2)
    {
        PWMDAC_TIMX->CCMR1 |= 6 << (4 + 8 * (chy - 1)); /* CH1/2 PWM&#196;£ê&#189;1 */
        PWMDAC_TIMX->CCMR1 |= 1 << (3 + 8 * (chy - 1)); /* CH1/2 &#212;¤×°&#212;&#216;ê1&#196;ü */
    }
    else if (chy <= 4)
    {
        PWMDAC_TIMX->CCMR2 |= 6 << (4 + 8 * (chy - 3)); /* CH3/4 PWM&#196;£ê&#189;1 */
        PWMDAC_TIMX->CCMR2 |= 1 << (3 + 8 * (chy - 3)); /* CH3/4 &#212;¤×°&#212;&#216;ê1&#196;ü */
    }

    PWMDAC_TIMX->CCER |= 1 << (4 * (chy - 1));      /* OCy ê&#228;3&#246;ê1&#196;ü */
    PWMDAC_TIMX->CCER |= 0 << (1 + 4 * (chy - 1));  /* OCy &#184;&#223;μ&#231;&#198;&#189;óDD§ */
    PWMDAC_TIMX->CR1 |= 1 << 7;     /* ARPEê1&#196;ü */
    PWMDAC_TIMX->CR1 |= 1 << 0;     /* ê1&#196;ü&#182;¨ê±&#198;÷TIMX */
}


这程序哪里设置的不对,就是数不出PWM波形

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

使用道具 举报

332

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1547
金钱
1547
注册时间
2014-7-11
在线时间
256 小时
 楼主| 发表于 2024-2-28 22:27:42 | 显示全部楼层
void pwmdac_set_voltage1(uint16_t vol)
{
    double temp = vol;
    temp /= 100;                /* &#203;&#245;D&#161;100±&#182;, μ&#195;μ&#189;êμ&#188;êμ&#231;&#209;1&#214;μ */
    temp = temp * 256 / 3.3;    /* &#189;&#171;μ&#231;&#209;1×a&#187;&#187;3éPWM&#213;&#188;&#191;&#213;±è */
    PWMDAC_TIMX_CCRX1 = temp;    /* éè&#214;&#195;D&#194;μ&#196;&#213;&#188;&#191;&#213;±è */
}

void pwmdac_set_voltage2(uint16_t vol)
{
    double temp = vol;
    temp /= 100;                /* &#203;&#245;D&#161;100±&#182;, μ&#195;μ&#189;êμ&#188;êμ&#231;&#209;1&#214;μ */
    temp = temp * 256 / 3.3;    /* &#189;&#171;μ&#231;&#209;1×a&#187;&#187;3éPWM&#213;&#188;&#191;&#213;±è */
    PWMDAC_TIMX_CCRX2 = temp;    /* éè&#214;&#195;D&#194;μ&#196;&#213;&#188;&#191;&#213;±è */
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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