完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F103RCT6呼吸灯实验PWM调不出来,用的原子MINI 开发板,利用PA8 复用功能tiM1_CH1 输出PWM
#include"stm32f10x.h" #include"sys.h" #define LED0 PAout(8) #define LED1 PDout(2) void SysTick_Init(u8 SYSCLK); //SysTick初始化函数声明 void delay_ms(u16 nms); //自定义的延时毫秒函数声明 void GPIO_Configuration(void); //GPIO端口初始化设置函数声明 void TIM1_PWM_Init(u16 arr,u16 psc);//定时器1初始化设置配置成PWM输出函数声明 u8 fac_us=0; u16 fac_ms=0; int main(void) { u16 led0pwmval=0; u8 dir=1; SysTick_Init(72); // 调用SysTick初始化函数 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); GPIO_Configuration(); TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz while(1) { delay_ms(10); if(dir)led0pwmval++; else led0pwmval--; if(led0pwmval>300)dir=0; if(led0pwmval==0)dir=1; TIM_SetCompare1(TIM1,led0pwmval); } } void SysTick_Init(u8 SYSCLK) //SysTick初始化函数 {SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SYSCLK/8; //SYSCLK的8分频 保存1us所需的计数次数 fac_ms=(u16)fac_us*1000; //1ms 需要计数的次数 } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);//使能PA,PD外设端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA8 端口配置 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出,TIM1_CH1输出PWM脉冲波形 GPIO_Init(GPIOA, GPIO_InitStructure); //根据设定参数初始化GPIOA.8 // GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA8 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD2 端口配置 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, GPIO_InitStructure); //根据设定参数初始化GPIOD.2,推挽输出,IO口速度为50MHz GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高 } void TIM1_PWM_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 不分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC1Init(TIM1, TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1预装载使能 TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM1, ENABLE); //使能TIM1 } void delay_ms(u16 nms) //利用SysTick自定义的延时毫秒函数 最长延时1864ms {u32 temp; SysTick->LOAD=(u32)nms*fac_ms; // nms毫秒需要装载的寄存器值 SysTick->VAL =0x00; //清空计数器 SysTick->CTRL=0x01; //开始倒数 do{temp=SysTick->CTRL;} while ((temp 0x01) !(temp (1<<16))); //等待时间到达 SysTick->CTRL =~0x01; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } |
|
相关推荐
1个回答
|
|
根据提供的代码,呼吸灯实验无法调出PWM的原因可能有以下几点:
1. 未正确配置GPIO端口:确保已正确配置PA8引脚的模式和复用功能,以使用TIM1_CH1输出功能。 2. 未初始化系统滴答定时器(SysTick):检查是否正确调用了SysTick_Init函数进行初始化,该函数用于提供延时功能。 3. 定时器1未正确配置:确认是否正确调用了TIM1_PWM_Init函数进行初始化配置,该函数用于将定时器1配置为PWM输出模式。 4. 未正确设置定时器1的自动重装载寄存器(ARR)和预分频器(PSC)的值:确认传入TIM1_PWM_Init函数的参数arr和psc是否正确,这两个参数决定了PWM信号的频率和占空比。 5. 延时时间设置不当:在主函数中,根据呼吸灯的需求,使用合适的延时时间。 需要仔细检查以上几个方面的配置,以确保呼吸灯实验能够正确输出PWM信号。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1713 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1600 浏览 1 评论
1038 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
715 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1651 浏览 2 评论
1903浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
694浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
546浏览 3评论
567浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
535浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 15:39 , Processed in 1.255114 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号