完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用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 ^_^* } } |
|
相关推荐
14个回答
|
|
消灭零回复。。。。
|
|
|
|
帮顶。
|
|
|
|
如果其他地方也不能正常工作的话,请考虑是不是初始地址错了
|
|
|
|
会不会是boot0悬空,程序根本没运行
|
|
|
|
虽然不能直接给你定位出是哪的问题,建议你仿真一下确认一下程序的执行。然后断点看一下对应几个寄存器的值看看跟配置是否一样。
|
|
|
|
建议 你后面加一个点灯程序,看看程序是不是重启后一直在执行?(1)如果不能正常执行,看看时钟配置是否正确?BOOT0和BOOT1的配置方式是否正确?(2)正常执行,看看定时器的配置是否正确?PWM的输出可以通过示波器来测量波形。
|
|
|
|
你得先确定程序是不是真的跑起来了!估计是根本没跑!
|
|
|
|
先确认晶振振起来没 是不是没复位呀
|
|
|
|
你的CCR1_Val在哪里?PWM参数没有初始化呀。
|
|
|
|
|
|
|
|
|
|
|
|
确信下载入flash了?
|
|
|
|
请问问题如何解决的,是哪里的原因呢?谢谢
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2234 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2053 浏览 3 评论
4664 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2197 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2734 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 10:43 , Processed in 0.926558 second(s), Total 67, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号