问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F350的TIMER_CHx_ON无法输出

国产芯片 单片机

GD32F350的TIMER_CHx_ON无法输出

望雪心2022-06-09
测试过TIM2_CH3输出PWM是好用的,下面是InitTIM15_CH0_ON的初始化函数,并不能让PB6输出PWM

void InitTIM15_CH0_ON(void){
                /* initialize GPIO */
                rcu_periph_clock_enable(RCU_GPIOB);                                                                                /*!< enable GPIOB clock */
                gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);                        /*!< set PB6 mode to AF */
                gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_6);        /*!< set PB6 options */
                /* associate GPIO and TIMER */
                    gpio_af_set(GPIOB, GPIO_AF_2, GPIO_PIN_6);                                /*!< set PB6 mode to AF2(TIMER15_CH0_ON) */
                /* initialize TIMER */
                void initTimer15(void);
}
void initTimer15(void)
{
        /* enable the TIMER15 clock */
        rcu_periph_clock_enable(RCU_TIMER15);
        /* clear para. of TIMER15 */
        timer_deinit(TIMER15);
        /* initialize TIMER15 freq = 108M/(215+1), duty = timer15_count0/1000, count = timer15_count0 + timer15_count1*/
        timer_parameter_struct timer_initpara;
        timer_initpara.prescaler = 215;
        timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
        timer_initpara.counterdirection = TIMER_COUNTER_UP;
        timer_initpara.period = 999;
        timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
        timer_initpara.repetitioncounter = 0;
        timer_init(TIMER15,&timer_initpara);
        /* config timer output */
        timer_oc_parameter_struct timer_ocinitpara;
        timer_ocinitpara.outputstate = TIMER_CCX_DISABLE;                 /*!< disable TIMER_CHx */
        timer_ocinitpara.outputnstate = TIMER_CCXN_ENABLE;                 /*!< enable TIMER_CHxN */
        timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_LOW;
        timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
        timer_channel_output_config(TIMER15, TIMER_CH_0, &timer_ocinitpara);
        //timer_auto_reload_shadow_enable(TIMER15);
        timer_primary_output_config(TIMER15, ENABLE);
        /* set TIMER_CHx PWM duty */
        timer_channel_output_pulse_value_config(TIMER15, TIMER_CH_0,1000);
        timer_channel_output_mode_config(TIMER15, TIMER_CH_0, TIMER_OC_MODE_PWM0);
        timer_channel_output_shadow_config(TIMER15, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
        /* enable the TIMER15 */
        timer_enable(TIMER15);
}


             自动判断 中文中文(简体)中文(香港)中文(繁体)英语日语朝鲜语德语法语俄语泰语南非语阿拉伯语阿塞拜疆语比利时语保加利亚语加泰隆语捷克语威尔士语丹麦语第维埃语希腊语世界语西班牙语爱沙尼亚语巴士克语法斯语芬兰语法罗语加里西亚语古吉拉特语希伯来语印地语克罗地亚语匈牙利语亚美尼亚语印度尼西亚语冰岛语意大利语格鲁吉亚语哈萨克语卡纳拉语孔卡尼语吉尔吉斯语立陶宛语拉脱维亚语毛利语马其顿语蒙古语马拉地语马来语马耳他语挪威语(伯克梅尔)荷兰语北梭托语旁遮普语波兰语葡萄牙语克丘亚语罗马尼亚语梵文北萨摩斯语斯洛伐克语斯洛文尼亚语阿尔巴尼亚语瑞典语斯瓦希里语叙利亚语泰米尔语泰卢固语塔加路语茨瓦纳语土耳其语宗加语鞑靼语乌克兰语乌都语乌兹别克语越南语班图语祖鲁语      自动选择 中文中文(简体)中文(香港)中文(繁体)英语日语朝鲜语德语法语俄语泰语南非语阿拉伯语阿塞拜疆语比利时语保加利亚语加泰隆语捷克语威尔士语丹麦语第维埃语希腊语世界语西班牙语爱沙尼亚语巴士克语法斯语芬兰语法罗语加里西亚语古吉拉特语希伯来语印地语克罗地亚语匈牙利语亚美尼亚语印度尼西亚语冰岛语意大利语格鲁吉亚语哈萨克语卡纳拉语孔卡尼语吉尔吉斯语立陶宛语拉脱维亚语毛利语马其顿语蒙古语马拉地语马来语马耳他语挪威语(伯克梅尔)荷兰语北梭托语旁遮普语波兰语葡萄牙语克丘亚语罗马尼亚语梵文北萨摩斯语斯洛伐克语斯洛文尼亚语阿尔巴尼亚语瑞典语斯瓦希里语叙利亚语泰米尔语泰卢固语塔加路语茨瓦纳语土耳其语宗加语鞑靼语乌克兰语乌都语乌兹别克语越南语班图语祖鲁语     百度翻译 谷歌翻译 谷歌翻译(国内)   翻译    朗读 复制     正在查询,请稍候……    重试      朗读 复制        复制      朗读 复制      来源 谷歌翻译(国内)   译
回答 +关注 0
1805人浏览 1人回答问题 分享 举报
1 个回答
  • 周期值999,比较值不应该是1000,设置500试试
    望雪心 2022-6-9 17:47 回复TA
    谢谢,已经解决了,代码除了函数调用的时候写成了 “void inittimer15(void);”外没有其他问题。 排查了一下午,人傻了,这个差别还是重写一遍以后找到的 

您需要登录后才可以回复 登录 | 注册