您好!
我想使用自定义采样率从该 ADC 采集数据、因此我已将 STM32计时器设置为每秒触发12800个样本、并将其输出连接到 START 引脚信号。 此外、我已将 DRDY 信号连接到 MCU 中配置为下降沿中断的外部引脚之一、当中断触发时、我只需使用 RDATA 命令读取 ADC 数据值、 但这种方法的问题是、在某些样本中、我的数据为零、这是使用 MATLAB 捕获的数据的屏幕截图、
这是我的主循环代码
//复位 ADC HAL_GPIO_WritePin (GPIOA、ADC_RST_Pin、GPIO_PIN_RESET); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOA、ADC_RST_Pin、GPIO_Pin); //在连续模式下启动 ADC HAL_GPIO_WritePin (GPIOA、ADC=0x10000、ADC=0=0x43/ TX_Pin 、0x43_R2=0_Rx+[TX_Pin);//将0x43_Rx+TX_Rx_Rx_Rx_Rx+=0=0=12_Rx_Rx_Rx_Pin 写入0x43_Rx_Rx_Rx_Rx_Rx_Rx_Rx_Rx_Rx_Rx_Pin;//(0x4=0=0=0_Rx_Rx_Rx_Rx_Rx_Rx_Rx_Rx_R //读取寄存器以验证 TX[0]= 0x23;//读取 CONFIG3寄存器 TX[1]= 0x00;//要读取的寄存器数= 1 TX[2]= 0x00;// adc_sendCommand (TX、Rx、3); TX[0]= 0x41;//Wrtie 1 TX[1]= 0x00;//将 ADC_sendCommand (TX、Rx、3)设置 为0x00 ;//将时钟值设置为0xd2;//将 TX[0]配置为1sreg1;//将其写入到 s/segr2;// TX[0]= 0x42;//Wrtie config2寄存 器 TX[1]= 0x00;//要写入的寄存器数= 1 TX[2];//要写入的值 ADC_sendCommand (TX、Rx、3);TX[0]= 0x46;//rendie CH2 TX[1]= 0x00;// 要读取 的 ADC=0x2;tx2 (tx2);tx2 (tx2 = 0x2);tx2 (tx2 = 0x2;tx2;tx2 (要读取的 tx2;tx2) TX[0]=0x44;//将 fualt Reg TX[1]=0x00;//要读取的寄存器数= 1 TX[2]=0x00;// adc_sendCommand (TX、Rx、3); TX[0]=0x4D;//将 Unknown1寄存器 TX[1]=0x00;//将 TX[0]=0x4e=2 ;tc[0]/ unr=0x4e[2;tc=0=0[0]TX[0]= 0x4e[0]= 0x4e[0]/ r/2];tc=0[0=0[0]TX_reg = 0x4e[0]2;tc=0x4e[0]/ un/un/r=0x4e[0]2;tc=0=0=0]2;tc=0=0[0]2;tc=0[tc=0=0]2;tc=0=0[tc=0=0=0=0]2;tc=0=0=0=0[tc=0 TX[0]= 0x50;//写入 Unknown4寄存 器 TX[1]= 0x00;//要读取的寄存器数= 1 TX[2];// adc_sendCommand (TX、Rx、3); TX[0]= 0x51;//写入 Unknown5寄存器 TX[1]= 0x00;// adc_sendCommand (TX、Rx、3);tx[0]= 0x1; tc_end1; tc[TX = 0x00;tc=2;tc_sendrx (TX = 0x1、tc1、tc1;tc1、tc1、tc1、tc1、tc1、tc1、tc1、tc1、tc1、tc1;tc //sample = 12800且我们的时钟为84MHz、因此将时间设置为128Hz HAL_TIM_Base_Start_IT (&htim1); HAL_TIM_PWM_Start (&htim1、TIM_CHANNEL 1); TIM1->ARR=77; TIM1->CCR1 = 39; HAL_GPIO_WritePin、GPIO_RESET_Pin;GPIO_Pin //起始= 0 HAL_GPIO_WritePin (GPIOA、ADC_CS_Pin、GPIO_PIN_RESET);// CS = 0 ADC_READY=0; Start_CAPTURE=0; while (1) { if (Start_CAPTURE) { Start_CAPTURE=0; HAL_GPIO_WritePin (GPIOA、ADC_START_Pin、GPIO_Pin、1)}/设置引脚 if (adc_ready){ ADC_READY=0; TX[0]= 0x12;//RDATA 命令 for (int g=1;g<28;g++) { TX[g]=0; } HAL_SPI_TransmitReceive (&hspi1、TX、Rx、28、100); HAL_GPIO_WritePin (GPIOA、ADC_START_Pin、GPIO_PIN_RESET);//开始= 0 adcBuf[i]=(Rx[7]<< 24)|(Rx[8]<< 16)|(Rx[9]<< 8)| 0x00; adcBuf[i]/= 256; } }
ANS 这是我的外部中断代码
void EXTI3_IRQHandler (void) { //用户代码 begin EXTI3_IRQn 0 *// //*用户代码 end EXTI3_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler (GPIO_PIN_3); //用户代码 begin EXTI3_IRQn 1 */ ADC_READY=1; //*用户代码 end TI3 }*
这里是我的计时器中断代码
void TIM1_UP_TIM10_IRQHandler (void) { //用户代码开始 TIM1_UP_TIM10_IRQn 0 */ //*用户代码结束 TIM1_UP_TIM10_IRQn 0 */ HAL_TIM_IRQHandler (&HTIM10); //用户代码开始 TIM1_TIM10_IRQn = TIM1* = TIM10_IRQn 0 *= TIM1_TRIM10_TRIM10_TRIM10_TRIM0_TRIM0_TRIM0_TRIM_TRIM0_TRIM0_TOP0 * ****= TIM1_TRIM10_TRIM_TRIM10
那么、缺少什么或做错了?