Files

84 lines
2.3 KiB
C
Raw Permalink Normal View History

2026-04-09 10:14:20 +08:00
#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);
}
}
}