CIU32F003的PA0 GPIO_AF3_TIM3行,GPIO_AF2_TIM1不行
我在PA0处接了一个LED,GPIO_AF3_TIM3正常闪烁,而GPIO_AF2_TIM1时,LED不亮,麻烦专家看一下,问题出在哪里?
正常程序如下:
gpiox_af_init(GPIOx_LED,GPIOx_LED_PIN,GPIO_AF3_TIM3); //OK
timx_oc_init(TIM3,1000,250,TIM_CHANNEL_1); //OK
不正常程序如下:
gpiox_af_init(GPIOx_LED,GPIOx_LED_PIN,GPIO_AF2_TIM1); //OK
timx_oc_init(TIM1,1000,250,TIM_CHANNEL_1); //OK
//gpiox_af_init(GPIOA,GPIO_PIN_0,GPIO_AF2_TIM1)
//gpiox_af_init(GPIOA,GPIO_PIN_0,GPIO_AF3_TIM3)
void gpiox_af_init(GPIO_t* gpiox,U32 pinx,U8 af)
{
std_gpio_init_t timx_gpio_init = {0};
/* 使能LED对应的GPIO时钟 */
if (gpiox==GPIOA){
std_rcc_gpio_clk_enable(RCC_PERIPH_CLK_GPIOA);
}else if(gpiox==GPIOB){
std_rcc_gpio_clk_enable(RCC_PERIPH_CLK_GPIOB);
}else if(gpiox==GPIOC){
std_rcc_gpio_clk_enable(RCC_PERIPH_CLK_GPIOC);
}
/* TIM3 GPIO 配置
PB0 ------> TIM3_CH1
PB0 ------> TIM1_CH2
*/
timx_gpio_init.pin = pinx;
timx_gpio_init.mode = GPIO_MODE_ALTERNATE;
timx_gpio_init.pull = GPIO_PULLUP;
timx_gpio_init.alternate = af;//GPIO_AF3_TIM3;
std_gpio_init(gpiox, &timx_gpio_init);
}
//timx_oc_init(TIM1,1000,300,TIM_CHANNEL_1);//PA0 TIM1_CH1
//timx_oc_init(TIM3,1000,300,TIM_CHANNEL_1);//PA0 TIM3_CH1
void timx_oc_init(TIM_t* timx,U16 periodx,U16 duty,U16 channel_id)
{
std_tim_basic_init_t basic_init_struct = {0};
std_tim_output_compare_init_t oc_config_struct = {0};
std_tim_output_compare_struct_init(&oc_config_struct);
/* TIMx时钟使能 */
if (timx==TIM1){
/* TIM1时钟使能 */
/**
* @brief APB外设2时钟使能
* @param periph_clock 指定使能的APB外设2时钟
* @ARG RCC_PERIPH_CLK_COMP
* @arg RCC_PERIPH_CLK_TIM1
* @arg RCC_PERIPH_CLK_SPI1
* @arg RCC_PERIPH_CLK_UART1
* @arg RCC_PERIPH_CLK_ADC
* @arg RCC_PERIPH_CLK_DBG
*/
std_rcc_apb2_clk_enable(RCC_PERIPH_CLK_TIM1);
/* 配置TIMx计数器参数 4800-1 100us*/
basic_init_struct.prescaler =(uint32_t)(SystemCoreClock/10000 - 1);//4800-1;
}else if (timx==TIM3){
/**
* @brief APB外设1时钟使能
* @param periph_clock 指定使能的APB外设1时钟
* @arg RCC_PERIPH_CLK_TIM3
* @arg RCC_PERIPH_CLK_UART2
* @arg RCC_PERIPH_CLK_I2C1
* @arg RCC_PERIPH_CLK_PMU
* @arg RCC_PERIPH_CLK_LPTIM1
*/
std_rcc_apb1_clk_enable(RCC_PERIPH_CLK_TIM3);
/* 配置TIMx计数器参数 4096*/
basic_init_struct.prescaler = 12;//2^12=4096
}
basic_init_struct.period = periodx*10-1; //10000-1
basic_init_struct.counter_mode = TIM_COUNTER_MODE_UP;
basic_init_struct.clock_div = TIM_CLOCK_DTS_DIV1;
basic_init_struct.repeat_counter = 0x0;
std_tim_init(timx, &basic_init_struct);
// /* 配置TIMx为工作模式1 */
// std_tim_work_mode1_enable(timx);
/* 配置通道1输出模式为PWM1模式 */
oc_config_struct.output_compare_mode = TIM_OUTPUT_MODE_PWM1;
oc_config_struct.output_pol = TIM_OUTPUT_POL_HIGH;
oc_config_struct.pulse = duty*10-1;
oc_config_struct.output_state = TIM_OUTPUT_ENABLE;
/**
* @brief 配置TIM比较输出参数
* @param timx TIM外设
* @param output_config TIM 输出比较配置结构体
* @param channel_id TIM 通道配置
* @arg TIM_CHANNEL_1
* @arg TIM_CHANNEL_2
* @arg TIM_CHANNEL_3
* @arg TIM_CHANNEL_4
* @retval 无
*/
std_tim_output_compare_init(timx, &oc_config_struct, channel_id);
/* 开启定时器计数 */
std_tim_enable(timx);
}
|
|