generated from hulk/gd32e23x_template_cmake_vscode
Compare commits
3 Commits
main
...
14fa262d35
| Author | SHA1 | Date | |
|---|---|---|---|
| 14fa262d35 | |||
| 70b8e3a602 | |||
| f5cfeb53d2 |
@@ -10,7 +10,7 @@ extern volatile bool g_ultrasonic_measure_done;
|
||||
|
||||
#define ULTRASONIC_TX_CYCLES 5U /* 发送5个PWM周期驱动换能器 */
|
||||
#define ULTRASONIC_TX_RINGDOWN_RELOAD 240U // 240us
|
||||
#define ULTRASONIC_MAX_TOF_RELOAD 1000U // 1000us
|
||||
#define ULTRASONIC_MAX_TOF_RELOAD 2000U // 1000us
|
||||
|
||||
/**************************************************************************************************/
|
||||
|
||||
|
||||
+17
-9
@@ -72,6 +72,7 @@
|
||||
#define RESP_TYPE_HEADER_ERR 0xF2 /**< 包头错误 */
|
||||
#define RESP_TYPE_TYPE_ERR 0xF3 /**< 类型错误 */
|
||||
#define RESP_TYPE_LEN_ERR 0xF4 /**< 长度错误 */
|
||||
#define RESP_TYPE_DATA_ERR 0xF5 /**< 数据错误 */
|
||||
/** @} */
|
||||
|
||||
/* ============================================================================
|
||||
@@ -225,7 +226,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
|
||||
// 命令必须以 'M' 开头
|
||||
if (cmd[0] != 'M'){
|
||||
send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -237,7 +238,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
if (used_base_cmd == 0)
|
||||
{
|
||||
// 'M' 后没有数字,格式错误
|
||||
send_response(RESP_TYPE_LEN_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_LEN_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -251,7 +252,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
// 启动超声波PWM发送
|
||||
ultrasonic_pwm_out_cycles();
|
||||
uint16_t timeout_count = 0;
|
||||
const uint16_t max_timeout = 150;
|
||||
const uint16_t max_timeout = 250;
|
||||
|
||||
while (!g_ultrasonic_measure_done && timeout_count < max_timeout) {
|
||||
delay_10us(1); // 延时 10us
|
||||
@@ -263,7 +264,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
ultrasonic_distance_raw_value_report();
|
||||
} else {
|
||||
static const uint8_t timeout_error_data[] = {0xFF, 0xFF };
|
||||
send_response(RESP_TYPE_OK, timeout_error_data, sizeof(timeout_error_data));
|
||||
send_response(RESP_TYPE_DATA_ERR, timeout_error_data, sizeof(timeout_error_data));
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -290,7 +291,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
break;
|
||||
}
|
||||
// 未在处理列表的无参数基础命令,回复错误
|
||||
send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -301,7 +302,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
const uint8_t used_param_cmd = parse_uint_dec(&cmd[cmd_index], (uint8_t)(cmd_len - cmd_index), ¶m_value);
|
||||
if (used_param_cmd == 0) {
|
||||
// 'S' 后没有数字,格式错误
|
||||
send_response(RESP_TYPE_LEN_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_LEN_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -314,7 +315,7 @@ void handle_command(const uint8_t *frame, uint8_t len) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -394,14 +395,14 @@ void command_process(void) {
|
||||
#endif
|
||||
|
||||
if (verification_status && cmd_buf[1] != PROTOCOL_BOARD_TYPE) {
|
||||
send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_TYPE_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
verification_status = false;
|
||||
}
|
||||
if (verification_status) {
|
||||
uint8_t crc_calc = command_sum_crc_calc(cmd_buf, expected_cmd_len);
|
||||
uint8_t crc_recv = cmd_buf[expected_cmd_len - 1];
|
||||
if (crc_calc != crc_recv) {
|
||||
send_response(RESP_TYPE_CRC_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
// send_response(RESP_TYPE_CRC_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
verification_status = false;
|
||||
}
|
||||
}
|
||||
@@ -432,6 +433,12 @@ void ultrasonic_distance_raw_value_report(void) {
|
||||
// 读取定时器计数值(微秒)
|
||||
uint16_t timer_count_us = timer_counter_read(US_ECHO_TIMER);
|
||||
|
||||
if (timer_count_us < ULTRASONIC_TX_RINGDOWN_RELOAD) {
|
||||
// 超出最大计时范围,返回错误
|
||||
send_response(RESP_TYPE_DATA_ERR, s_report_status_err, sizeof(s_report_status_err));
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算距离:定时器计数值 * 17 = 距离(0.1mm)
|
||||
// 声速340m/s,往返距离,时间单位us
|
||||
// 距离(mm) = (timer_count_us * 340) / (2 * 1000) = timer_count_us * 0.17
|
||||
@@ -444,4 +451,5 @@ void ultrasonic_distance_raw_value_report(void) {
|
||||
|
||||
// 发送响应包
|
||||
send_response(RESP_TYPE_OK, raw_result, sizeof(raw_result));
|
||||
return;
|
||||
}
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ int main(void)
|
||||
ultrasonic_config();
|
||||
ultrasonic_pwm_out_cycles();
|
||||
|
||||
printf("Flash size: %d Kbytes\n", get_flash_size());
|
||||
// printf("Flash size: %d Kbytes\n", get_flash_size());
|
||||
|
||||
#ifdef DEBUG_VERBOSE
|
||||
char hello_world[] = {"Hello World!\r\n"};
|
||||
|
||||
Reference in New Issue
Block a user