|
楼主 |
发表于 2024-1-16 11:38:51
|
显示全部楼层
void DMA1_Channel1_IRQHandler(void)
{
//传输完成中断
if(DMA_GetITStatus(DMA1_IT_TC1) != RESET){
DMA_ClearITPendingBit(DMA1_IT_TC1);
Adc1_Dma_CallBack(&adc1_dma_buf[adc1_dma_len_temp], adc1_dma_len_temp);
}
//半传输完成中断
if(DMA_GetITStatus(DMA1_IT_HT1) != RESET ){
DMA_ClearITPendingBit(DMA1_IT_HT1);
Adc1_Dma_CallBack(&adc1_dma_buf[0], adc1_dma_len_temp);
}
}
void Adc1_Dma_CallBack(uint16_t *src, uint16_t len)
{
for(int i=0; i<adc1_point_num; i++){
adc1_avg_val[i] = src[i] / 4096.0f * 3300.0f;
}
Adc1_Send_Org_Data_1(0, &adc1_avg_val[0], len);
}
adc1_dma_len_temp长度是100,进中断后计算完上传数据,显示波形是正常的,
为了排查这个问题,调试过程中还加入了平均处理,即100个点平均一次得出一个点,这样就相当于是1kHz采样率了,就是1ms一个点,1s就是1000点,但是通过串口调试助手看发送数据量依然达不到理论计算值(串口波特率设置的是460800,再提高有几率会出现数据错乱的现象) |
|