[CIU32F003系列] CIU32F003的PA0 GPIO_AF3_TIM3行,GPIO_AF2_TIM1不行

[复制链接]
528|4
yangjiyou1969 发表于 2025-9-19 05:24 | 显示全部楼层 |阅读模式
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);
       
}
不想起床喵星人 发表于 2025-9-24 17:48 | 显示全部楼层
你提到LED在GPIO_AF3_TIM3时正常工作,但在GPIO_AF2_TIM1时不亮,这可能意味着引脚配置或时钟配置有误
星辰伴梦 发表于 2025-9-27 16:47 | 显示全部楼层
请确保你已经正确配置了TIM1的时钟和NVIC,以及确保TIM1的通道1没有被其他功能占用。
 楼主| yangjiyou1969 发表于 2025-9-28 08:25 | 显示全部楼层
星辰伴梦 发表于 2025-9-27 16:47
请确保你已经正确配置了TIM1的时钟和NVIC,以及确保TIM1的通道1没有被其他功能占用。
...

你好,谢谢你的热心,我用TIM3是没有用NVIC的,正常;我的功能很简单,只有一个LED功能,没有其他功能。时钟我用中断版的没问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部