打印
[单片机芯片]

菜**CH32V307调试踩不玩的坑

[复制链接]
853|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
trucyw|  楼主 | 2023-2-3 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段时间刚好有点时间空闲来填坑,结果掉坑里起不来之CH32V307 PWMOUT
测试板用到PD3/PB8/PB9/PC6这四个IO做PWM用
结果四个IO用作GPIO均输出正常,改成PWM没有一个有输出
如下PB8/TIM4CH3示例代码
void TIM4_PWMOut_Init(u16 arr, u16 psc, u16 ccp)
{
    GPIO_InitTypeDef        GPIO_InitStructure = {0};
    TIM_OCInitTypeDef       TIM_OCInitStructure = {0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    TIM_TimeBaseInitStructure.TIM_Period = arr;
    TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = ccp;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC3Init(TIM4, &TIM_OCInitStructure);

    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Disable);
    TIM_ARRPreloadConfig(TIM4, ENABLE);
}
请各位DS帮忙看下是否代码写错,还是其他什么有问题
请沁恒FAE伸手援助
在此谢过各位DS

使用特权

评论回复
沙发
trucyw|  楼主 | 2023-2-4 20:19 | 只看该作者
大侠帮忙解下,谢谢

使用特权

评论回复
板凳
zhjerry| | 2023-2-6 10:43 | 只看该作者
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
==>
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);

使用特权

评论回复
地板
WCHTech2| | 2023-2-6 13:19 | 只看该作者
您好,若你是想用TIM4的PWM输出,只有PB8、PB9分别对应TIM4_CH3和TIM4_CH4,PD3对应的是TIM10_CH2,PC6对应的是TIM8_CH1,若你想将这4个脚用作PWM输出,要针对这4个引脚及对应的定时器全部进行配置,具体可参考CH32V307数据手册引脚描述
CH32V307数据手册:https://www.wch.cn/downloads/CH32V307DS0_PDF.html

使用特权

评论回复
5
trucyw|  楼主 | 2023-2-6 15:30 | 只看该作者
PB8/TIM4CH3如下代码要怎样修改呢
void TIM4_PWMOut_Init(u16 arr, u16 psc, u16 ccp)
{
    GPIO_InitTypeDef        GPIO_InitStructure = {0};
    TIM_OCInitTypeDef       TIM_OCInitStructure = {0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    TIM_TimeBaseInitStructure.TIM_Period = arr;
    TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = ccp;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC3Init(TIM4, &TIM_OCInitStructure);

    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Disable);
    TIM_ARRPreloadConfig(TIM4, ENABLE);
}

使用特权

评论回复
6
sagade| | 2023-2-6 18:46 | 只看该作者
TIM_CtrlPWMOutputs(TIM4, ENABLE );
TIM_Cmd( TIM4, ENABLE );
感觉这两句要加上吧。
我是在V203的官方例子上换了个通道,正常输出PWM的,V307还没时间玩

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

548

帖子

2

粉丝