问答

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

nmmdw

TA的家园币:21  

  • 沁恒ch32v307无法实现hc-sr04超声波测距,大家帮忙看看

    //超声波测距模块==============================================================//system.cu16count=0;voidTIM2_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));voidultrasonic_Init(u16arr,u16psc)//初始化{//初始化结构体GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;//使能IM2时钟RCC_APB1PeriphClockCmd(ultrasonic_RCC|RCC_APB1Periph_TIM2,ENABLE);//配置GPIO_InitStructure.GPIO_Pin=ultrasonic_Pin;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(ultrasonic_GPIOx,&GPIO_InitStructure);GPIO_ResetBits(ultrasonic_GPIOx,ultrasonic_Pin);GPIO_InitStructure.GPIO_Pin=ultrasonic_Pin_t;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(ultrasonic_GPIOx,&GPIO_InitStructure);GPIO_ResetBits(ultrasonic_GPIOx,ultrasonic_Pin|ultrasonic_Pin_t);TIM_DeInit(TIM2);//定时器周期,实际就是设定自动重载寄存器ARR的值,ARR为要装载到实际自动重载寄存器(即影子寄存器)的值,可设置范围为0至65535。TIM_TimeBaseInitStructure.TIM_Period=arr;//定时器预分频器设置,时钟源经该预分频器才是定时器计数时钟CK_CNT,它设定PSC寄存器的值。//计算公式为:计数器时钟频率(fCK_CNT)等于fCK_PSC/(PSC[15:0]+1),可实现1至65536分频。TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//时钟分频,设置定时器时钟CK_INT频率与死区发生器以及数字滤波器采样时钟频率分频比。可以选择1、2、4分频。TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//设置计数模式,向上计数模式//TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x00;//设置重复计数器的值,0