你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 重上电PWM不输出

[复制链接]
正在缓冲...99% 提问时间:2017-6-15 11:25 /
用STM32F103的PWM驱动直流电机,程序下载运行是OK的。
重新上电后,PWM不输出
不知道什么原因


#include "stm32f10x.h"

/**
* @brief  配置TIM复用输出PWM时用到的I/O
* @param  无
* @retval 无
*/
static void TIM_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* 使能定时器通道引脚GPIO时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    /* 配置定时器通道1输出引脚模式:复用推挽输出模式 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**
  * @brief  配置TIM输出的PWM信号的模式,如周期、极性、占空比
  * @param  无
  * @retval 无
  */
/**
  * TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT 重新计数
  *                    TIMx_CCR(电平发生变化)
  * 信号周期=(TIMx_ARR +1 ) * 时钟周期
  * 占空比=TIMx_CCR/(TIMx_ARR +1)
  */
static void TIM_Mode_Config(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;

    /* 使能定时器时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

    /* 定时器基本参数配置 */
    TIM_TimeBaseStructure.TIM_Period = 100 - 1;                                //自动重装载计数器 100即为20k一个定时周期
    TIM_TimeBaseStructure.TIM_Prescaler = 36 - 1;                        //预分频:36
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;            //设置时钟分频系数:不分频(这里用不到)
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;     //向上计数模式
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                //复位计数器
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

    /* 模式配置 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                //配置为PWM模式1
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //输出状态设置:使能输出
    TIM_OCInitStructure.TIM_Pulse = 10;                                                        //设置跳变值,当计数器计数到这个值时,电平发生跳变
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                //当定时器计数值小于CCR1_Val时为高电平
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);                                                //初始化通道1
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);                                //使能通道1

    TIM_ARRPreloadConfig(TIM1, ENABLE);                                                                //使能TIM重载寄存器ARR

    TIM_CtrlPWMOutputs(TIM1, ENABLE);                               //TIM主输出使能

    TIM_Cmd(TIM1, ENABLE);                                          //使能TIM
}


/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
    TIM_GPIO_Config();//GPIO初始化
    TIM_Mode_Config();//TIM PWM输出初始化

    while(1)
    {
        //add your code here ^_^*

    }
}



STM32-PWM.zip (513.98 KB, 下载次数: 13)
<
收藏 1 评论14 发布时间:2017-6-15 11:25

举报

14个回答
wenyangzeng 回答时间:2017-7-26 17:43:04

特地弄了片板子试试,很正常也。断电后再通电也正常的,楼主是否应该检查一下STM32F103的RESET电路状况。

IMG_1715.JPG

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

select326 回答时间:2017-6-26 12:58:51
消灭零回复。。。。
SInzo 回答时间:2017-6-27 09:05:59
帮顶。

好吃好好吃 回答时间:2017-7-26 09:35:18
如果其他地方也不能正常工作的话,请考虑是不是初始地址错了
dapan100 回答时间:2017-7-26 10:18:28
会不会是boot0悬空,程序根本没运行

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

张亚飞 回答时间:2017-7-26 10:30:27
虽然不能直接给你定位出是哪的问题,建议你仿真一下确认一下程序的执行。然后断点看一下对应几个寄存器的值看看跟配置是否一样。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

xiaoxiaoyuwu 回答时间:2017-7-26 11:03:31
建议 你后面加一个点灯程序,看看程序是不是重启后一直在执行?(1)如果不能正常执行,看看时钟配置是否正确?BOOT0和BOOT1的配置方式是否正确?(2)正常执行,看看定时器的配置是否正确?PWM的输出可以通过示波器来测量波形。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

sfd123-302670 回答时间:2017-7-26 11:34:45
你得先确定程序是不是真的跑起来了!估计是根本没跑!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

gujiamao 回答时间:2017-7-26 11:56:31
先确认晶振振起来没  是不是没复位呀
toofree 回答时间:2017-7-26 14:07:52
你的CCR1_Val在哪里?PWM参数没有初始化呀。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版