Compare commits

...

3 Commits

Author SHA1 Message Date
nzasch
7659060d18 tx adc opamp 2022-02-07 02:08:56 +01:00
nzasch
c666acc12c tx adc opamp 2022-02-07 02:07:11 +01:00
nzasch
4db3b6246d tx adc opamp 2022-02-07 02:02:36 +01:00
10 changed files with 1260 additions and 52 deletions

View File

@@ -44,6 +44,9 @@ struct __attribute__((__packed__)) s_stato {
uint8_t guadagno_rx;
uint8_t guadagno_mic;
uint8_t canale;
uint16_t tx_f_freq;
uint16_t tx_f_banda;
uint8_t tx_f_beta;
};
struct __attribute__((__packed__)) s_canale {

View File

@@ -88,7 +88,7 @@ void am_demodulator(q31_t *in_I, q31_t *in_Q, uint16_t size, q31_t *out);
// void filter_init(void);
void set_rx_audio_filter(void);
void st2_filter_init(void);
void audio_filter_init(void);
void rx_inizializza_filtro_audio(void);
void audio_filter_generate_coeffs(int32_t *Coeffs, uint32_t freq, uint32_t bw, uint8_t beta);
q31_t hb_fir15(q31_t * samples_ringbuf, uint8_t sample_index, uint8_t buff_size_mask, q31_t * coefficients);

View File

@@ -14,45 +14,82 @@
// #define TX_TYPE TX_TYPE_SI5351
#define TX_TYPE TX_TYPE_DAC
// TX ADC
#define TX_ADC_DIVISOR 7680
#define TX_ADC_SAMPLE_RATE (CLOCK/TX_ADC_DIVISOR) // 21875
#define TX_ADC_DIMENSIONE_BUFFER (64)
#define TX_ADC_BUFFER_RATE (TX_ADC_SAMPLE_RATE/TX_ADC_DIMENSIONE_BUFFER)
// TX IF
/*
#define TX_AUDIO_FILTER_INTERPOLATION_FACTOR (16)
#define TX_AUDIO_FILTER_BLOCK_SIZE (1024)
#define TX_AUDIO_FILTER_TAP_NUM (128)
*/
#define TX_FILTRO_AUDIO_FATTORE_INTERPOLAZIONE (16)
#define TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO (64)
#define TX_FILTRO_AUDIO_NUMERO_TAP (128)
// filtro audio
#define TX_FILTRO_AUDIO_TAP_NUM 128
#define TX_FILTRO_AUDIO_FREQ_DEF (1250)
#define TX_FILTRO_AUDIO_FREQ_MAX (TX_DAC_SAMPLE_RATE/2)
#define TX_FILTRO_AUDIO_BANDA_DEF (2000)
#define TX_FILTRO_AUDIO_BANDA_MAX (TX_DAC_SAMPLE_RATE/2)
#define TX_FILTRO_AUDIO_BETA_DEF (16)
#define TX_FILTRO_AUDIO_BLOCK_SIZE TX_DAC_BUFFER_SIZE
#define TX_FILTRO_RF_FATTORE_INTERPOLAZIONE (16)
#define TX_FILTRO_RF_DIMENSIONE_BLOCCO (1024)
#define TX_FILTRO_RF_NUMERO_TAP (128)
// TX DAC
#define TX_DAC_SAMPLE_RATE (CLOCK/480) // 350000
#define TX_DAC_BUFFER_SIZE (1024)
#define TX_DAC_BUFFER_RATE (TX_DAC_SAMPLE_RATE/TX_DAC_BUFFER_SIZE) // 341,796
// TX ADC
#define TX_ADC_DIVISOR 7680
#define TX_ADC_SAMPLE_RATE (CLOCK/TX_ADC_DIVISOR) // 21875
#define TX_ADC_BUFFER_SIZE (64)
#define TX_ADC_BUFFER_RATE (TX_ADC_SAMPLE_RATE/TX_ADC_BUFFER_SIZE)
#define TX_NCO_FREQUENCY (TX_ADC_SAMPLE_RATE/((0xFFFFFFFF)/NCO2_INCREMENT)) // 1750
#define TX_SMETER_SCALE 2
// variabili
extern uint8_t tx_signal, tx_signal_last;
extern q31_t tx_nco1_increment;
// buffer
// TX ADC
extern volatile uint8_t tx_adc_buffer_pronto;
extern uint16_t tx_adc_buffer[TX_ADC_BUFFER_SIZE];
extern uint16_t tx_adc_buffer[TX_ADC_DIMENSIONE_BUFFER];
// TX filtro audio
extern arm_fir_instance_q31 tx_filtro_audio_struttura;
extern q31_t tx_filtro_audio_stato[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
extern int32_t tx_filtro_audio_coefficienti[TX_FILTRO_AUDIO_NUMERO_TAP];
// TX DAC
extern volatile uint8_t tx_dac_buffer_mezzo_vuoto, tx_dac_buffer_toggle;
extern q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];
// TX IF
extern q31_t tx_I_buffer[TX_ADC_BUFFER_SIZE], tx_Q_buffer[TX_ADC_BUFFER_SIZE];
extern q31_t tx_I_buffer[TX_ADC_DIMENSIONE_BUFFER], tx_Q_buffer[TX_ADC_DIMENSIONE_BUFFER];
// funzioni
// filtro audio
extern void tx_filtra_audio(q31_t *out, uint16_t dimensione, uint16_t *in);
extern arm_fir_instance_q31 tx_audio_filter_I_struct, tx_audio_filter_Q_struct;
extern q31_t tx_audio_filter_I_state[TX_AUDIO_FILTER_BLOCK_SIZE + TX_AUDIO_FILTER_TAP_NUM - 1];
extern q31_t tx_audio_filter_Q_state[TX_AUDIO_FILTER_BLOCK_SIZE + TX_AUDIO_FILTER_TAP_NUM - 1];
extern int32_t tx_audio_filter_coeffs[TX_AUDIO_FILTER_TAP_NUM];
extern q31_t tx_audio_filter_I_state[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
extern q31_t tx_audio_filter_Q_state[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
extern int32_t tx_audio_filter_coeffs[TX_FILTRO_AUDIO_NUMERO_TAP];
// mixer
@@ -60,7 +97,7 @@ void tx_mixer(q31_t *out, uint16_t dimensione_out, q31_t *I_in, q31_t *Q_in, int
// modulatori
void modulatore_dc(q31_t *out, uint16_t dimensione, q31_t *in);
void modulatore_dc(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in);
void modulatore_ssb(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in, q31_t nco_freq);
void modulatore_am(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in);

View File

@@ -115,11 +115,6 @@ void set_frequency(void){
set_tx_nco1_freq(canale.frequenza);
}
/*
void set_filter(void){
audio_filter_generate_coeffs(audio_filter_coeffs, audio_filter_freq, audio_filter_bw, audio_filter_beta);
}
*/
void imposta_modulazione(void){
st2_filter_init();
// cambia offset
@@ -154,6 +149,11 @@ void state_set_default(void){
audio_filter_bw = RX_AUDIO_FILTER_BW_DEF;
audio_filter_beta = RX_AUDIO_FILTER_BETA_DEF;
audio_filter_generate_coeffs(audio_filter_coeffs, audio_filter_freq, audio_filter_bw, audio_filter_beta);
stato.tx_f_freq = TX_FILTRO_AUDIO_FREQ_DEF;
stato.tx_f_banda = TX_FILTRO_AUDIO_BANDA_DEF;
stato.tx_f_beta = TX_FILTRO_AUDIO_BETA_DEF;
audio_filter_generate_coeffs(tx_filtro_audio_coefficienti, stato.tx_f_freq, stato.tx_f_banda, stato.tx_f_beta);
state_changed = 0xFFFF;
// strcpy(tabstring, "TX AUD MEM NO");
}

View File

@@ -218,7 +218,7 @@ void avvia_trasmissione(void){
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, tx_dac_buffer, (TX_DAC_BUFFER_SIZE * 2), DAC_ALIGN_12B_R);
// adc
HAL_ADC_Start_DMA(&hadc2, (uint32_t*)tx_adc_buffer, TX_ADC_BUFFER_SIZE);
HAL_ADC_Start_DMA(&hadc2, (uint32_t*)tx_adc_buffer, TX_ADC_DIMENSIONE_BUFFER);
} else if(TX_TYPE == TX_TYPE_SI5351){
si5351_on_clk(0);
si5351_on_clk(1);
@@ -362,13 +362,17 @@ int main(void)
// display_update_state();
st2_filter_init();
audio_filter_init();
rx_inizializza_filtro_audio();
if(TX_TYPE == TX_TYPE_DAC){
// tx_audio_filter_init();
tx_filtro_audio_inizializza();
}
// diag();
// HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1000);
// HAL_DAC_Start(&hdac3, DAC_CHANNEL_1);
HAL_OPAMP_Start(&hopamp1);
HAL_OPAMP_Start(&hopamp2);
set_rx_gain();
@@ -428,10 +432,10 @@ int main(void)
set_changed(9);
}
}
if(trasmissione){
if(trasmissione && 0){
if(TX_TYPE == TX_TYPE_SI5351) tx_signal = 78;
else if(TX_TYPE == TX_TYPE_DAC){
tx_signal = measure_log_abs_mean_tx(tx_adc_buffer, TX_ADC_BUFFER_SIZE) * TX_SMETER_SCALE;
tx_signal = measure_log_abs_mean_tx(tx_adc_buffer, TX_ADC_DIMENSIONE_BUFFER) * TX_SMETER_SCALE;
// tx_signal++;
}
if(tx_signal != s_meter){
@@ -627,7 +631,7 @@ static void MX_ADC2_Init(void)
*/
sConfig.Channel = ADC_CHANNEL_VOPAMP2;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;

View File

@@ -249,7 +249,7 @@ void st2_filter_init(void){
}
}
void audio_filter_init(void){
void rx_inizializza_filtro_audio(void){
arm_fir_init_q31 (&audio_filter_struct, RX_AUDIO_FILTER_TAP_NUM, audio_filter_coeffs, &audio_filter_state[0], RX_AUDIO_FILTER_BLOCK_SIZE);
}

View File

@@ -10,45 +10,75 @@ uint8_t tx_signal, tx_signal_last;
// TX ADC
volatile uint8_t tx_adc_buffer_pronto;
uint16_t tx_adc_buffer[TX_ADC_BUFFER_SIZE];
uint16_t tx_adc_buffer[TX_ADC_DIMENSIONE_BUFFER];
q31_t tx_I_buffer[TX_ADC_BUFFER_SIZE], tx_Q_buffer[TX_ADC_BUFFER_SIZE];
// TX filtro audio
arm_fir_instance_q31 tx_filtro_audio_struttura;
q31_t tx_filtro_audio_stato[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
int32_t tx_filtro_audio_coefficienti[TX_FILTRO_AUDIO_NUMERO_TAP];
// TX IF
q31_t tx_audio_buffer_fitrato[TX_ADC_DIMENSIONE_BUFFER], tx_I_buffer[TX_ADC_DIMENSIONE_BUFFER], tx_Q_buffer[TX_ADC_DIMENSIONE_BUFFER];
// TX DAC
volatile uint8_t tx_dac_buffer_mezzo_vuoto, tx_dac_buffer_toggle;
q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];
// FILTRO
arm_fir_instance_q31 tx_audio_filter_I_struct, tx_audio_filter_Q_struct;
q31_t tx_audio_filter_I_state[TX_AUDIO_FILTER_BLOCK_SIZE + TX_AUDIO_FILTER_TAP_NUM - 1];
q31_t tx_audio_filter_Q_state[TX_AUDIO_FILTER_BLOCK_SIZE + TX_AUDIO_FILTER_TAP_NUM - 1];
int32_t tx_audio_filter_coeffs[TX_AUDIO_FILTER_TAP_NUM];
//arm_fir_instance_q31 tx_audio_filter_I_struct, tx_audio_filter_Q_struct;
// q31_t tx_audio_filter_I_state[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
// q31_t tx_audio_filter_Q_state[TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO + TX_FILTRO_AUDIO_NUMERO_TAP - 1];
// =============
void trasmetti(void){
if(TX_TYPE == TX_TYPE_DAC){
if(tx_adc_buffer_pronto){
HAL_GPIO_WritePin(GPIO1_GPIO_Port, GPIO1_Pin, GPIO_PIN_SET);
if (canale.modulazione == MOD_DC) modulatore_dc(tx_I_buffer, TX_ADC_BUFFER_SIZE, tx_adc_buffer);
else if(canale.modulazione == MOD_LSB || canale.modulazione == MOD_USB) modulatore_ssb(tx_I_buffer, tx_Q_buffer, TX_ADC_BUFFER_SIZE, tx_adc_buffer, NCO2_INCREMENT);
else if (canale.modulazione == MOD_AM) modulatore_am(tx_I_buffer, tx_Q_buffer, TX_ADC_BUFFER_SIZE, tx_adc_buffer);
else if (canale.modulazione == MOD_CWL || canale.modulazione == MOD_CWU) genera_tono(tx_adc_buffer[rx_dac_buffer_toggle], TX_ADC_BUFFER_SIZE);
// HAL_GPIO_WritePin(GPIO1_GPIO_Port, GPIO1_Pin, GPIO_PIN_SET);
tx_filtra_audio(tx_audio_buffer_fitrato, TX_ADC_DIMENSIONE_BUFFER, tx_adc_buffer);
if (canale.modulazione == MOD_DC) modulatore_dc(tx_I_buffer, tx_Q_buffer, TX_ADC_DIMENSIONE_BUFFER, tx_audio_buffer_fitrato);
else if(canale.modulazione == MOD_LSB || canale.modulazione == MOD_USB) modulatore_ssb(tx_I_buffer, tx_Q_buffer, TX_ADC_DIMENSIONE_BUFFER, tx_audio_buffer_fitrato, NCO2_INCREMENT);
else if (canale.modulazione == MOD_AM) modulatore_am(tx_I_buffer, tx_Q_buffer, TX_ADC_DIMENSIONE_BUFFER, tx_audio_buffer_fitrato);
else if (canale.modulazione == MOD_CWL || canale.modulazione == MOD_CWU) modulatore_cw(tx_I_buffer, TX_ADC_DIMENSIONE_BUFFER);
tx_adc_buffer_pronto = 0;
HAL_GPIO_WritePin(GPIO1_GPIO_Port, GPIO1_Pin, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIO1_GPIO_Port, GPIO1_Pin, GPIO_PIN_RESET);
}
if(tx_dac_buffer_mezzo_vuoto){
tx_mixer(tx_dac_buffer[tx_dac_buffer_toggle], TX_DAC_BUFFER_SIZE, tx_I_buffer, tx_Q_buffer, tx_nco1_increment);
tx_dac_buffer_mezzo_vuoto = 0;
}
}
// tono
// genera tono CW
if(rx_dac_buffer_mezzo_vuoto && (canale.modulazione == MOD_CWL || canale.modulazione == MOD_CWU)){
genera_tono(rx_dac_buffer[rx_dac_buffer_toggle], RX_DAC_BUFFER_SIZE);
rx_dac_buffer_mezzo_vuoto = 0;
}
}
// trasforma da uint12 a q31 e filtra audio in ingresso
void tx_audio_filter_init(void){
arm_fir_interpolate_init_q15 (&tx_audio_filter_I_struct, TX_FILTRO_AUDIO_FATTORE_INTERPOLAZIONE, TX_FILTRO_AUDIO_NUMERO_TAP, tx_audio_filter_coeffs, &tx_audio_filter_I_state[0], TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO);
arm_fir_interpolate_init_q15 (&tx_audio_filter_Q_struct, TX_FILTRO_AUDIO_FATTORE_INTERPOLAZIONE, TX_FILTRO_AUDIO_NUMERO_TAP, tx_audio_filter_coeffs, &tx_audio_filter_Q_state[0], TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO);
}
void tx_filtro_audio_inizializza(void){
arm_fir_init_q31 (&tx_filtro_audio_struttura, TX_FILTRO_AUDIO_NUMERO_TAP, tx_filtro_audio_coefficienti, &tx_filtro_audio_stato[0], TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO);
}
void tx_filtra_audio(q31_t *out, uint16_t dimensione, uint16_t *in){
uint16_t indice;
q31_t tmp_buffer[TX_ADC_DIMENSIONE_BUFFER];
while(indice < dimensione){
tmp_buffer[indice] = ((int32_t)in[indice] - 2048) * 2;
indice++;
}
arm_fir_q31(&tx_filtro_audio_struttura, tmp_buffer, out, TX_FILTRO_AUDIO_DIMENSIONE_BLOCCO);
}
// miscela I&Q con NCO
void tx_mixer(q31_t *out, uint16_t dimensione_out, q31_t *I_in, q31_t *Q_in, int32_t incremento_nco){
uint16_t indice_out = 0;
uint16_t indice_IQ = 0;
@@ -62,7 +92,7 @@ void tx_mixer(q31_t *out, uint16_t dimensione_out, q31_t *I_in, q31_t *Q_in, int
// arm_fir_interpolate_q31(&tx_audio_filter_Q_struct, Q_in, Q_tmp, TX_AUDIO_FILTER_BLOCK_SIZE);
while(indice_out < dimensione_out){
indice_IQ = indice_out/TX_AUDIO_FILTER_INTERPOLATION_FACTOR; // va da 0 a 64
indice_IQ = indice_out/TX_FILTRO_RF_FATTORE_INTERPOLAZIONE; // indice IQ ingresso va da 0 a 64
tmp = LL_CORDIC_ReadData(CORDIC);
accumulatore_fase += incremento_nco;
@@ -72,8 +102,8 @@ void tx_mixer(q31_t *out, uint16_t dimensione_out, q31_t *I_in, q31_t *Q_in, int
// out[indice_out] = indice_out;
// out[indice_out] = (cos>>4) + 2048;
// out[indice_out] = (sin/16);
out[indice_out] = I_in[indice_IQ];
// out[indice_out] = (I_in[i] * sin) + (Q_in[i] * cos);
// out[indice_out] = I_in[indice_IQ];
out[indice_out] = ((I_in[indice_IQ] * sin) + (Q_in[indice_IQ] * cos))/0x1000;
// interpolazione grezza, da rifare
// out[indice_out] = (((I_in[indice_IQ] * sin) + (Q_in[indice_IQ] * cos)) >> 20) + 2048;
@@ -84,11 +114,18 @@ void tx_mixer(q31_t *out, uint16_t dimensione_out, q31_t *I_in, q31_t *Q_in, int
// modulatori
void modulatore_dc(q31_t *out, uint16_t dimensione, q31_t *in){
void modulatore_dc(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in){
uint16_t indice = 0;
static double angle;
while(indice < dimensione){
// out[indice] = (int32_t)in[indice]-2048;
out[indice] = indice * 32;
// angle += 0.15;
// if(angle >= 6.28) angle = 0;
out_I[indice] = in[indice];
out_Q[indice] = 0;
// out[indice] = indice * 32;
// out[indice] = (int32_t)sin(indice) * 2000;
// out[indice] = 0;
indice++;
}
}
@@ -125,11 +162,18 @@ void modulatore_am(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in){
}
}
void tx_audio_filter_init(void){
arm_fir_interpolate_init_q15 (&tx_audio_filter_I_struct, TX_AUDIO_FILTER_INTERPOLATION_FACTOR, TX_AUDIO_FILTER_TAP_NUM, tx_audio_filter_coeffs, &tx_audio_filter_I_state[0], TX_AUDIO_FILTER_BLOCK_SIZE);
arm_fir_interpolate_init_q15 (&tx_audio_filter_Q_struct, TX_AUDIO_FILTER_INTERPOLATION_FACTOR, TX_AUDIO_FILTER_TAP_NUM, tx_audio_filter_coeffs, &tx_audio_filter_Q_state[0], TX_AUDIO_FILTER_BLOCK_SIZE);
void modulatore_fm(q31_t *out_I, q31_t *out_Q, uint16_t dimensione, q31_t *in){
}
void modulatore_cw(q31_t *out, uint16_t dimensione){
uint16_t indice = 0;
while(indice < dimensione){
out[indice] = 0x80000000;
}
}
uint16_t u12_sine(void){
static double angle;
angle += CW_TONE_INCREMENT;
@@ -153,7 +197,7 @@ uint8_t measure_log_abs_mean_tx(q31_t *samples, uint16_t dimensione){
q31_t abs;
while(index < dimensione){
samples[index] = (int32_t)samples[index]-4096;
samples[index] = (int32_t)samples[index]-2048;
abs = (samples[index] > 0) ? samples[index] : (q31_t)__QSUB(0, samples[index]);
measured_signal += (abs >> 6);
index++;
@@ -178,3 +222,4 @@ void set_tx_nco1_freq(int32_t freq){
si5351_set_frequency(canale.frequenza, 1);
}
}

View File

@@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.15.2] date: [Sun Feb 06 14:18:27 CET 2022]
# File automatically-generated by tool: [projectgenerator] version: [3.15.2] date: [Mon Feb 07 02:00:22 CET 2022]
##########################################################################################################################
# ------------------------------------------------

View File

@@ -15,14 +15,14 @@ ADC1.Rank-2\#ChannelRegularConversion=1
ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_47CYCLES_5
ADC1.WatchdogChannel=ADC_CHANNEL_VOPAMP1
ADC1.master=1
ADC2.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_VOPAMP2
ADC2.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_VOPAMP2
ADC2.ContinuousConvMode=ENABLE
ADC2.DMAContinuousRequests=ENABLE
ADC2.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests
ADC2.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests
ADC2.NbrOfConversionFlag=1
ADC2.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC2.Rank-1\#ChannelRegularConversion=1
ADC2.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
ADC2.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC2.Rank-2\#ChannelRegularConversion=1
ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_47CYCLES_5
ARM.CMSIS.5.7.0.CMSISJjCORE=true
ARM.CMSIS.5.7.0.CMSISJjCORE_Checked=true
ARM.CMSIS.5.7.0.CMSISJjDSP=Source
@@ -255,6 +255,7 @@ PA3.Mode=PGA Internally connected_IO0_BIAS
PA3.Signal=OPAMP1_VINM0
PA4.Signal=COMP_DAC11_group
PA5.Signal=COMP_DAC12_group
PA7.Locked=true
PA7.Mode=Follower_Internally_Connected
PA7.Signal=OPAMP2_VINP
PA9.GPIOParameters=GPIO_FM6

1118
codice/manitest Normal file

File diff suppressed because it is too large Load Diff