#include "app_calibration.h" #include "mx_log.h" /* 最简移植模板*/ // 接收上位机下发的数据处理函数 void process_rx(void) { uint8_t rx_chunk[64]; uint16_t recv_len = 0; //如果是串口通信,则在串口接收到数据的地方,调用mozen_protocol_receive_byte 喂入字节流 //recv_len = usart_rx_recv(USART_3_TR, rx_chunk, sizeof(rx_chunk)); //如果是usb cdc 通信,则在usb cdc 接收到数据的地方,调用mozen_protocol_receive_byte 喂入字节流 //recv_len = usbcdc_rx_recv(rx_chunk, sizeof(rx_chunk)); for(uint16_t i = 0; i < recv_len; i++) { mozen_protocol_receive_byte(rx_chunk[i]); } } //新协议需要调用的发送函数,需要外部自己实现一下函数定义 static int mozen_tx(const uint8_t *frame, uint16_t len) { if ((frame == NULL) || (len == 0U)) { return -1; } //这里替换具体项目平台的发送函数,例如: // usart_dma_send_data(USART_0_TR, (uint8_t *)frame, len); return 0; } typedef struct { uint16_t adc_channel_cache[AX_BUF_NUM]; uint16_t g_sensor_raw_value[AX_NUM]; uint16_t g_sensor_ref_value[AX_NUM]; uint16_t sensor1_resi_output[AX_NUM]; uint16_t sensor1_display_output[AX_NUM]; uint16_t sensor1_voltage[AX_NUM][AY_NUM]; } Hc4051AdcValue; Hc4051AdcValue temp_adc_value; int main(void) { //项目中的外设初始化 //... /*Step 1 */ //把这三个函数放在外设初始化之后,然后设置一下发送回调, mozen_protocol_set_tx(mozen_tx); mozen_protocol_init(); app_calibration_reset_init(); uint16_t count_ay = 0; while(1) { /*Step 2 处理上位机下发的数据,内部调用mozen_protocol_receive_byte会解析协议 */ process_rx(); scan_y(&temp_adc_value, count_ay); // scan_y 就是熟悉的正扫反扫的函数 count_ay++; if (count_ay >= AY_NUM) { //扫完一帧 count_ay = 0; /*Step 3 将原始帧数据传入,返回标定后二维结果。 */ uint16_t (*cailed_sensor_data)[MT_AY_NUM]; cailed_sensor_data = process_calibration_frame(temp_adc_value.sensor1_voltage); // 预留给外部算法扩展: 可在此处继续处理 cailed_sensor_data 比如拿到cailed_sensor_data 做抗蠕变等其他算法 //... //发走 send_sensor_frame(cailed_sensor_data); } } }