沁恒微电子 ch32v307 RISC-V 开发板试用
本次利用tiM1产生一个18KHz的PWM波
1:对TIM1及输出通道功能管脚等进行初始化
- void TIM1_PWMOut_Init( u16 arr, u16 psc, u16 ccp )
- {
- GPIO_InitTypeDef GPIO_InitStructure={0};
- TIM_OCInitTypeDef TIM_OCInitStructure={0};
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};
- NVIC_InitTypeDef NVIC_InitStruct;
- //开外设时钟
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1, ENABLE );
- //初始化管脚PA.8的工作模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init( GPIOA, &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_TimeBaseInit( TIM1, &TIM_TimeBaseInitStructure);
- //初始化输出比较单元,采用PWM1模式
- 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_OC1Init( TIM1, &TIM_OCInitStructure );
- //使能TIM1的PWM输出,并禁止或使能预装载寄存器
- TIM_CtrlPWMOutputs(TIM1, ENABLE );
- TIM_OC1PreloadConfig( TIM1, TIM_OCPreload_Disable );
- TIM_ARRPreloadConfig( TIM1, ENABLE );
- //开启比较匹配时的中断使能,为后续实验准备的,本次PWM实际不需要开启中断
- TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
- //中断优先级NVIC设置:中断通道、抢占优先级、响应优先级、使能
- NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn;
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStruct);
- //使能TIM1
- TIM_Cmd( TIM1, ENABLE );
- }
2:在主函数中调用TIM初始化函数
- int main(void)
- {
- Delay_Init();
- //sysclk = 72MHz psc = 3 ,4分频18kHz, ARR=999
- TIM1_PWMOut_Init( 999, 3, 499 );
- while(1)
- {
- Delay_Ms(2000);
- }
- }
以上代码就可以在PA.8引脚输出18KHz的PWM波。
实验视频:
https://yingsheng.elecfans.com/s ... cWZzDhdnP%2FPJOgJvg
更多回帖
长按上方图片保存到相册