问答

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

nmmdw

TA的家园币:50  

  • ch32v307用HC-SR04 超声波测距和MQ2 烟雾浓度时会卡死,大家帮我看看代码

    本帖最后由nmmdw于2024-7-412:58编辑s1.c文件//============================================================================//HC-SR04超声波测距模块==============================================================voidultrasonic_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);}u16count=0;voidInput_Capture_Init(u16arr,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;//使能IM2时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);ultrasonic_GPIO_Init();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;//设置重复计数

  • 沁恒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