generated from hulk/gd32e23x_template_cmake_vscode
Rewrite the M1 command to send the drive signal after receiving the M1 command, and turn on TIMER16 at the same time. Set the measurement completion flag after 240us, and turn off TIMER16 after the maximum TOF timing.
This commit is contained in:
@@ -74,29 +74,10 @@ void ultrasonic_pwm_out_cycles(void) {
|
||||
timer_enable(US_TX_TIMER);
|
||||
|
||||
// TODO 启动后续回波计时器
|
||||
// timer_enable(TIMER15);
|
||||
// timer_enable(US_ECHO_TIMER);
|
||||
|
||||
}
|
||||
|
||||
// void ultrasonic_transmit_debounce_delay(const uint16_t micro_second) {
|
||||
// rcu_periph_clock_enable(US_TX_DELAY_RCU);
|
||||
// timer_deinit(US_TX_DELAY_TIMER);
|
||||
|
||||
// timer_parameter_struct timer_initpara;
|
||||
// timer_struct_para_init(&timer_initpara);
|
||||
// timer_initpara.prescaler = 71;
|
||||
// timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
// timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
// timer_initpara.period = micro_second - 1;
|
||||
// timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
// timer_initpara.repetitioncounter = 0;
|
||||
// timer_init(US_TX_DELAY_TIMER, &timer_initpara);
|
||||
|
||||
// timer_auto_reload_shadow_enable(US_TX_DELAY_TIMER);
|
||||
// timer_interrupt_enable(US_TX_DELAY_TIMER, TIMER_INT_UP);
|
||||
// nvic_irq_enable(TIMER15_IRQn, 1U);
|
||||
// }
|
||||
|
||||
void ultrasonic_receive_exti_config(void) {
|
||||
rcu_periph_clock_enable(US_RX_GPIO_RCU);
|
||||
rcu_periph_clock_enable(US_RX_EXTI_RCU);
|
||||
@@ -112,47 +93,51 @@ void ultrasonic_receive_exti_config(void) {
|
||||
}
|
||||
|
||||
void ultrasonic_echo_timer_config(void) {
|
||||
// 使能TIMER16时钟
|
||||
rcu_periph_clock_enable(US_ECHO_RCU);
|
||||
|
||||
// 复位定时器到默认状态
|
||||
timer_deinit(US_ECHO_TIMER);
|
||||
|
||||
// 配置基本定时器参数
|
||||
timer_parameter_struct timer_initpara;
|
||||
timer_struct_para_init(&timer_initpara);
|
||||
timer_initpara.prescaler = 71;
|
||||
|
||||
// 设置分频器:72MHz ÷ 72 = 1MHz,每个计数 = 1us
|
||||
timer_initpara.prescaler = 71; // (72-1),实际分频比为72
|
||||
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
timer_initpara.period = ULTRASONIC_MAX_TOF_RELOAD - 1;
|
||||
|
||||
// 设置周期:999 (0-999共1000个计数) = 1000us = 1ms最大计时
|
||||
timer_initpara.period = 999; // 1000us重装载周期
|
||||
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
timer_init(TIMER15, &timer_initpara);
|
||||
|
||||
// 初始化定时器基本参数
|
||||
timer_init(US_ECHO_TIMER, &timer_initpara);
|
||||
|
||||
// 配置通道0用于240us比较中断(不是PWM输出,仅用于比较)
|
||||
timer_oc_parameter_struct timer_oc_initpara;
|
||||
timer_channel_output_struct_para_init(&timer_oc_initpara);
|
||||
timer_oc_initpara.outputstate = TIMER_CCX_ENABLE;
|
||||
|
||||
// 禁用输出,仅用于内部比较中断
|
||||
timer_oc_initpara.outputstate = TIMER_CCX_DISABLE;
|
||||
timer_oc_initpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||
timer_channel_output_config(TIMER15, TIMER_CH_1,&timer_oc_initpara);
|
||||
timer_channel_output_config(US_ECHO_TIMER, US_ECHO_CH, &timer_oc_initpara);
|
||||
|
||||
timer_interrupt_enable(TIMER15, TIMER_INT_CH1 | TIMER_INT_UP);
|
||||
nvic_irq_enable(TIMER15_IRQn, 0);
|
||||
|
||||
|
||||
// timer_parameter_struct timer_initpara;
|
||||
// timer_struct_para_init(&timer_initpara);
|
||||
// timer_initpara.prescaler = 71;
|
||||
// timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
// timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
// timer_initpara.period = ULTRASONIC_MAX_TOF_RELOAD;
|
||||
// timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
// timer_initpara.repetitioncounter = 0;
|
||||
// timer_init(US_ECHO_TIMER, &timer_initpara);
|
||||
|
||||
// timer_ic_parameter_struct timer_icinitpara;
|
||||
// timer_channel_input_struct_para_init(&timer_icinitpara);
|
||||
// timer_icinitpara.icpolarity = TIMER_IC_POLARITY_BOTH_EDGE;
|
||||
// timer_icinitpara.icselection = TIMER_IC_SELECTION_INDIRECTTI;
|
||||
// timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
|
||||
// timer_icinitpara.icfilter = 0x03;
|
||||
// timer_input_capture_config(US_ECHO_TIMER, US_ECHO_CH, &timer_icinitpara);
|
||||
// 设置比较模式为时间比较(不是PWM模式)
|
||||
timer_channel_output_mode_config(US_ECHO_TIMER, US_ECHO_CH, TIMER_OC_MODE_TIMING);
|
||||
|
||||
// 设置240us时触发比较中断(计数值239,因为从0开始计数)
|
||||
timer_channel_output_pulse_value_config(US_ECHO_TIMER, US_ECHO_CH, 239);
|
||||
|
||||
// 启用比较中断(CH0)和重装载中断(UP)
|
||||
timer_interrupt_enable(US_ECHO_TIMER, TIMER_INT_CH0); // 240us比较中断
|
||||
timer_interrupt_enable(US_ECHO_TIMER, TIMER_INT_UP); // 1000us重装载中断
|
||||
|
||||
// 配置NVIC中断优先级(设置为较高优先级1,确保及时响应)
|
||||
nvic_irq_enable(TIMER16_IRQn, 1);
|
||||
|
||||
// 注意:定时器配置完成但不启动,需要在其他地方调用timer_enable()启动
|
||||
}
|
||||
|
||||
void ultrasonic_config(void) {
|
||||
|
Reference in New Issue
Block a user