新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2019-7-10
- 在线时间
- 4 小时
|
初探HAL库,想用两个定时器输出两路PWM,并把两路PWM接到了LED,结果一灯亮,一灯不亮(本来两个灯应该闪烁)程序如下,请大家帮忙看一下哪的问题。
#include "pwm.h"
#include "led.h"
TIM_HandleTypeDef TIM1_Handler,TIM3_Handler; //¶¨ê±Æ÷¾ä±ú
TIM_OC_InitTypeDef TIM1_CH1Handler,TIM3_CH4Handler; //¶¨ê±Æ÷1í¨μà1¾ä±ú
//TIM1 PWM2¿·Ö3õê¼»ˉ
//arr£o×Ô¶ˉ֨װÖμ¡£
//psc£oê±ÖóÔ¤·ÖÆμêy
//¶¨ê±Æ÷òç3öê±¼ä¼ÆËã·½·¨:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=¶¨ê±Æ÷1¤×÷ÆμÂê,μ¥λ:Mhz
void TIM1_PWM_Init(u16 arr,u16 psc)
{
TIM1_Handler.Instance=TIM1; //¶¨ê±Æ÷1
TIM1_Handler.Init.Prescaler=psc; //¶¨ê±Æ÷·ÖÆμ
TIM1_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//ÏòéϼÆêyÄ£ê½
TIM1_Handler.Init.Period=arr; //×Ô¶ˉÖØ×°ÔØÖμ
TIM1_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&TIM1_Handler); //3õê¼»ˉPWM
TIM1_Handler.Instance=TIM3; //¶¨ê±Æ÷3
HAL_TIM_PWM_Init(&TIM3_Handler); //3õê¼»ˉPWM
TIM1_CH1Handler.OCMode=TIM_OCMODE_PWM1; //Ä£ê½Ñ¡Ôñ WM1
TIM1_CH1Handler.Pulse=arr/2; //éèÖñè½ÏÖμ,′ËÖμóÃà′è·¶¨Õ¼¿Õ±è£¬Ä¬èϱè½ÏÖμÎa×Ô¶ˉÖØ×°ÔØÖμμÄò»°ë,¼′Õ¼¿Õ±èÎa50%
TIM1_CH1Handler.OCPolarity=TIM_OCPOLARITY_LOW; //êä3ö±è½Ï¼«DÔÎaμí
HAL_TIM_PWM_ConfigChannel(&TIM1_Handler,&TIM1_CH1Handler,TIM_CHANNEL_1);//ÅäÖÃTIM1í¨μà1
TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //Ä£ê½Ñ¡Ôñ WM1
TIM3_CH4Handler.Pulse=arr/4; //éèÖñè½ÏÖμ,′ËÖμóÃà′è·¶¨Õ¼¿Õ±è£¬Ä¬èϱè½ÏÖμÎa×Ô¶ˉÖØ×°ÔØÖμμÄò»°ë,¼′Õ¼¿Õ±èÎa25%
TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //êä3ö±è½Ï¼«DÔÎaμí
HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);//ÅäÖÃTIM3í¨μà4
HAL_TIM_PWM_Start(&TIM1_Handler,TIM_CHANNEL_1);//¿aÆô WMí¨μà1
HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);//¿aÆô WMí¨μà4
}
//¶¨ê±Æ÷μ×2ãÇy¶ˉ£¬ê±Öóê1Äü£¬òy½ÅÅäÖÃ
//′Ëoˉêy»á±»HAL_TIM_PWM_Init()μ÷óÃ
//htim:¶¨ê±Æ÷¾ä±ú
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
GPIO_InitTypeDef GPIO_Initure;
if(htim->Instance==TIM1)
{
__HAL_RCC_TIM1_CLK_ENABLE(); //ê1Äü¶¨ê±Æ÷1
__HAL_RCC_GPIOA_CLK_ENABLE(); //¿aÆôGPIOAê±Öó
GPIO_Initure.Pin=GPIO_PIN_8; //PA8
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_Initure.Pull=GPIO_PULLUP; //éÏà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
if(htim->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE(); //ê1Äü¶¨ê±Æ÷3
__HAL_RCC_GPIOB_CLK_ENABLE(); //¿aÆôGPIOBê±Öó
GPIO_Initure.Pin=GPIO_PIN_8; //PB8
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_Initure.Pull=GPIO_PULLUP; //éÏà-
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //¸ßËù
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
}
//éèÖÃTIM1í¨μà1μÄÕ¼¿Õ±è
//compare:±è½ÏÖμ
void TIM_SetTIM1Compare1(u32 compare)
{
TIM1->CCR1=compare;
TIM3->CCR4=compare/2;
}
//¶¨ê±Æ÷1ÖD¶Ï·tÎñoˉêy
void TIM1_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM1_Handler);
}
//¶¨ê±Æ÷3ÖD¶Ï·tÎñoˉêy
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM3_Handler);
}
|
|