第一次提交

This commit is contained in:
2026-04-09 10:14:20 +08:00
commit e325a77b42
584 changed files with 279711 additions and 0 deletions

339
App/app_scan.c Normal file
View File

@@ -0,0 +1,339 @@
#include "app_scan.h"
#include "bsp_rs2251.h"
#include "main.h"
#include "bsp_74hc595.h"
#include "bsp_adc.h"
#include "resi_math_lib.h"
#include "string.h"
#include "mx_serial.h"
#include "app_soft.h"
#include "bsp_can.h"
#include "systick.h"
#include "lib_cal_creep_resistance.h"
#include "app_calibration.h"
#include "mozen_protocol.h"
#include "app_mozen_handler.h"
#include "flash_port.h"
#include "bsp_flash.h"
enum scan_ad {
changge_low,
changge_low1,
changge_low2,
changge_low3,
getAD_L0,
getAD_L1,
getAD_L2,
getAD_L3,
getAD_L4,
getAD_L5,
getAD_L6,
getAD_L7,
fast_l,
changge_hig,
changge_hig1,
changge_hig2,
changge_hig3,
getAD_H0,
getAD_H1,
getAD_H2,
getAD_H3,
getAD_H4,
getAD_H5,
getAD_H6,
getAD_H7,
get_break
}state;
uint8_t hc595_ranks[] = {7,6,5,4,3,2,1,0,15,14,13,12};//<2F><>ʼ<EFBFBD><CABC>Ĭ<EFBFBD><C4AC>
int flag_send = 0;
volatile uint8_t scan_num = 0;
static uint16_t cailed_sensor_data[MT_AX_NUM][MT_AY_NUM];//<2F><>16bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8_t frame8bit[MT_AX_NUM][MT_AY_NUM];//<2F><>8bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
adc_value_frame_struct temp_adc_value;
uint64_t task_tick = 0;
uint8_t serial_tx_buffer[AX_NUM][AY_NUM] = {0};//ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
cal_creep_resistance_t creep_strength_value;
uint8_t Matrix_Stab[AX_NUM][AY_NUM] = {0};
uint8_t Matrix_Creep[AX_NUM][AY_NUM] = {0};
uint8_t Matrix_Display[AX_NUM][AY_NUM] = {0};
mx_frame_struct mx_sensor_frame;
int print_counter = 0;
void Hc4051Delay(uint32_t num)
{
while(num --);
}
void usart_event_handler(void)
{
static uint16_t recv_len = 0;
static uint8_t rx_buffer[1024] = {0x00};
recv_len = usart_rx_recv(USART_3_TR, rx_buffer, sizeof(rx_buffer));
if(recv_len > 0)
{
uint16_t i;
for (i = 0; i < recv_len; i++)
{
mozen_protocol_feed_byte(&g_mozen_prot, rx_buffer[i], 0);
}
}
}
/*
* @function: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param: frame: <20><><EFBFBD><EFBFBD>֡
* @param: len: <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* @return: 0:<3A>ɹ<EFBFBD> -1:ʧ<><CAA7>
*/
static int mozen_uart_tx(const uint8_t *frame, uint16_t len)
{
if ((frame == NULL) || (len == 0U)) {
return -1;
}
usart_tx_push(USART_3_TR, (uint8_t *)frame,len);
return 0;
}
void app_user_map_init(void){
mx_sensor_frame.trantype = 0x01;
mx_sensor_frame.type = 0x01;
mx_sensor_frame.datalen = sizeof(serial_tx_buffer);
creep_strength_value.x_max = AX_NUM;
creep_strength_value.y_max = AY_NUM;
creep_strength_value.matrix_stab = (uint8_t*)Matrix_Stab;
creep_strength_value.matrix_creep = (uint8_t*)Matrix_Creep;
creep_strength_value.matrix_display = (uint8_t*)Matrix_Display;
app_mozen_init(mozen_uart_tx);
flash_port_ops_t flash_ops =
{
.read = flash_read,
.write = flash_write,
.erase = flash_erase,
.is_erased = bsp_flash_is_erased
};
app_calibration_init(&flash_ops);
}
uint64_t time_tmr1;
void AD_Sacn(){
// if(state >= get_break){
// return;
// }
switch(state){
case changge_low:
REF_OUT(1);//<2F><>ɨ
ic_74hc595_clean_0(32);
break;
case changge_low1:
break;
case changge_low2:
break;
case changge_low3:
break;
case getAD_L0:
temp_adc_value.sensor_iqr_ref_value[scan_num][0] = GetAdcValue(1);
temp_adc_value.sensor_iqr_ref_value[scan_num][8] = GetAdcValue(0);
Choose_AX_Channel(4);
break;
case getAD_L1:
temp_adc_value.sensor_iqr_ref_value[scan_num][1] = GetAdcValue(1);
temp_adc_value.sensor_iqr_ref_value[scan_num][9] = GetAdcValue(0);
Choose_AX_Channel(2);
break;
case getAD_L2:
temp_adc_value.sensor_iqr_ref_value[scan_num][2] = GetAdcValue(1);
temp_adc_value.sensor_iqr_ref_value[scan_num][10] = GetAdcValue(0);
Choose_AX_Channel(1);
break;
case getAD_L3:
temp_adc_value.sensor_iqr_ref_value[scan_num][3] = GetAdcValue(1);
temp_adc_value.sensor_iqr_ref_value[scan_num][11] = GetAdcValue(0);
Choose_AX_Channel(7);
break;
case getAD_L4:
temp_adc_value.sensor_iqr_ref_value[scan_num][7] = GetAdcValue(1);
Choose_AX_Channel(5);
break;
case getAD_L5:
temp_adc_value.sensor_iqr_ref_value[scan_num][6] = GetAdcValue(1);
Choose_AX_Channel(3);
break;
case getAD_L6:
temp_adc_value.sensor_iqr_ref_value[scan_num][5] = GetAdcValue(1);
Choose_AX_Channel(0);
break;
case getAD_L7:
temp_adc_value.sensor_iqr_ref_value[scan_num][4] = GetAdcValue(1);
Choose_AX_Channel(6);
state = fast_l;
break;
case fast_l:
REF_OUT(1);//<2F><>ɨ
ic_74hc595_clean_0(32);
break;
case changge_hig:
REF_OUT(0);
ic_74hc595_io_write_1(hc595_ranks[scan_num]);
break;
case changge_hig1:
break;
case changge_hig2:
break;
case changge_hig3:
break;
case getAD_H0:
temp_adc_value.sensor_iqr_raw_value[0] = GetAdcValue(1);
temp_adc_value.sensor_iqr_raw_value[8] = GetAdcValue(0);
Choose_AX_Channel(4);
break;
case getAD_H1:
temp_adc_value.sensor_iqr_raw_value[1] = GetAdcValue(1);
temp_adc_value.sensor_iqr_raw_value[9] = GetAdcValue(0);
Choose_AX_Channel(2);
break;
case getAD_H2:
temp_adc_value.sensor_iqr_raw_value[2] = GetAdcValue(1);
temp_adc_value.sensor_iqr_raw_value[10] = GetAdcValue(0);
Choose_AX_Channel(1);
break;
case getAD_H3:
temp_adc_value.sensor_iqr_raw_value[3] = GetAdcValue(1);
temp_adc_value.sensor_iqr_raw_value[11] = GetAdcValue(0);
Choose_AX_Channel(7);
break;
case getAD_H4:
temp_adc_value.sensor_iqr_raw_value[7] = GetAdcValue(1);
Choose_AX_Channel(5);
break;
case getAD_H5:
temp_adc_value.sensor_iqr_raw_value[6] = GetAdcValue(1);
Choose_AX_Channel(3);
break;
case getAD_H6:
temp_adc_value.sensor_iqr_raw_value[5] = GetAdcValue(1);
Choose_AX_Channel(0);
break;
case getAD_H7:
temp_adc_value.sensor_iqr_raw_value[4] = GetAdcValue(1);
Choose_AX_Channel(6);
break;
case get_break:
return;
}
state++;
}
void IRQ_Scan(adc_value_frame_struct *adc_raw_value){
static math_resi_cal_t math_resi_cal = {0};
static int math_scan_num = 0;
__disable_irq();
math_scan_num = scan_num;
memcpy(adc_raw_value->sensor_raw_value,adc_raw_value->sensor_iqr_raw_value,24);
memcpy(adc_raw_value->sensor_ref_value,adc_raw_value->sensor_iqr_ref_value[math_scan_num],24);
scan_num++;
if(scan_num == AX_NUM)
{
scan_num = 0;
flag_send= 1;
print_counter++;
if(print_counter == 10)
{
print_counter = 0;
}
}
if(print_counter >= 9){
state = changge_low;
}
else
state = fast_l;
__enable_irq();
math_resi_cal.sensor_adc_value = adc_raw_value->sensor_raw_value;
math_resi_cal.resi_adc_value = adc_raw_value->sensor_ref_value;
math_resi_cal.math_number = AX_NUM;
math_resi_cali_once(&math_resi_cal,
adc_raw_value->sensor_resi_output,
AX_NUM,
SCAN_LOW_LEVEL);
math_display_resi(adc_raw_value->sensor_resi_output,
adc_raw_value->sensor_display_output,
AX_NUM,
RESI_BACKWARDS,
SINGLE_BYTE);
memcpy(adc_raw_value->sensor_voltage[math_scan_num],adc_raw_value->sensor_display_output,AX_NUM);
}
void scan_deal(void){
if(state >= get_break)
{
IRQ_Scan(&temp_adc_value);
}
}
void TMR1_OVF_TMR10_IRQHandler(void)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󴥷<EFBFBD>
if(tmr_flag_get(TMR1, TMR_OVF_FLAG) != RESET)
{
AD_Sacn();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޴<EFBFBD><DEB4><EFBFBD><EFBFBD>ж<EFBFBD>
tmr_flag_clear(TMR1, TMR_OVF_FLAG);
}
}
int counter_fps;
int counter_fps1;
void adc_deal(void){
if(flag_send == 1){
flag_send = 0;
memcpy(frame8bit,temp_adc_value.sensor_voltage,144);
mx_sensor_frame.data = (uint8_t *)frame8bit;
mx_serial_tx_frame(USART_3_TR,&mx_sensor_frame);
counter_fps++;
}
if((get_system_tick() - task_tick) >= 1000){
task_tick = get_system_tick();
counter_fps1 = counter_fps;
counter_fps = 0;
}
}