84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
|
|
#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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|