This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你(们)好
我正在使用名为'HAL_readAdcRawValue'的函数来读取 ADC 计数值。 传递给函数的参数是项目中使用的 ADC 通道编号。 在函数内部、传递的通道编号使用开关情况转换为所需的 ADC 通道编号。
我当前面临的问题是、将为所有通道复制第一个 ADC 读取值。 例如、如果对该函数的第一次调用针对通道1、则所有后续通道读取请求实际上仅读取通道1。
该函数中是否有任何错误?
------------------------------
uint16_t HAL_readAdcRawValue (uint8_t 通道 Id_u8)
{
uint16_t adcRawValue_U16;
//配置内存缓冲区
//* ADC12模块的基地址
//*配置内存缓冲区0
//*将输入 A0映射到内存缓冲区0
//* Vref+= AVcc
//* Vref-= EXT 正极
//*内存缓冲区0不是序列的末尾
ADC12_B_configureMemoryParam configureMemoryParam ={0};
configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_0;
//选择通道
switch (channelId_u8)
{
ADC_CHANNEL BATTERY_VOLT_MONITOR:// P1.0
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A0;
中断;
ADC_CHANNEL PRESSURE _VALUE MONITOR:// P1.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A1;
中断;
案例 ADC_CHANNEL PRESSURE _SUPPLY_VOLT_MONITOR:// P4.3
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A11;
中断;
ADC_CHANNEL ANALOG_IN_1:// P4.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A9;
中断;
ADC_CHANNEL ANALOG_IN_2:// P4.2
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A10;
中断;
案例 ADC_CHANGE_TC:// P3.1
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A13;
中断;
默认值:
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_TCMAP;//ADC12_B_INPUT_A0;
中断;
}
configureMemoryParam.refVoltageSourceSelect = ADC12_B_VREFPS_INTBUF_VREFNEG_VSS;//ADC12_B_VREFPS_EXTPOS_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOSEQUENCE;
configureMemoryParam.windowComparatorSelect = ADC12_B_Window_Comparator_disable;
configureMemoryParam.differialModeSelect = ADC12_B_different_mode_disable;
ADC12_B_configureMemory (ADC12_B_base、&configureMemoryParam);
//配置内部基准
while (Ref_A_isRefGenBusy (REF_A_base));//如果 ref 发生器忙、请等待
Ref_a_enableTempSensor (REF_A_base);
Ref_A_setReferenceVoltage (REF_A_base、REF_A_VREF2_0V);
Ref_a_enableReferenceVoltage (REF_A_base);
DELAY_MS (10);
//Enable/Start 第一个采样和转换周期
//* ADC12模块的基地址
//*开始转换到内存缓冲区0
//*使用单通道单次转换模式
ADC12_B_startConversion (ADC12_B_base、ADC12_B_MEMORY_0、ADC12_B_SINGLECHANNEL);
//轮询内存缓冲区0上的中断
while (!ADC12_B_getInterruptStatus (ADC12_B_base、0、ADC12_B_IFG0));
adcRawValue_U16 = ADC12_B_getResults (ADC12_B_B_B_B_BASE、ADC12_B_MEMORY_0);
return (adcRawValue_U16);
}
------------------------------
谢谢
-
此致
Soumyajit