Posted
: 2020-08-21
Status
:
Completed
Previous
:
STM32底层LL库TIMPWM输入测量LL篇11
Next
:
STM32底层LL库TIM做按键消抖LL篇13
LL
库main.h
添加宏1
#define ADC_BUFF_SIZE 100
main.c
文件的数组为1
__IO uint16_t ADC_ConvertedValue[ADC_BUFF_SIZE][3];
stm32f10x_it.c
文件的外部变量数组为1
extern __IO uint16_t ADC_ConvertedValue[ADC_BUFF_SIZE][3];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* @brief This function handles DMA1 channel1 global interrupt.
*/
void DMA1_Channel1_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
uint8_t i=0;
uint32_t vref_adc=0,vsense_adc=0,adc_adc=0;
if(LL_DMA_IsActiveFlag_TC1(DMA1)!=RESET)
{
LL_DMA_ClearFlag_TC1(DMA1);
for(i=0; i<ADC_BUFF_SIZE; i++)
{
vref_adc+=ADC_ConvertedValue[i][2];
vsense_adc+=ADC_ConvertedValue[i][1];
adc_adc+=ADC_ConvertedValue[i][0];
}
VREF=1.2f*4095*100/vref_adc;
temp=__LL_ADC_CALC_TEMPERATURE_TYP_PARAMS(4300,1430,25,VREF*1000,vsense_adc/100,LL_ADC_RESOLUTION_12B);
adcValue=__LL_ADC_CALC_DATA_TO_VOLTAGE(VREF*1000,adc_adc/100,LL_ADC_RESOLUTION_12B)/1000;
printf( "\r\n The IC current tem= %.2fC\r\n", temp);
printf( "\r\n The IC current VDDA= %.2fV\r\n", VREF);
printf( "\r\n The IC current ADC= %.2fV\r\n", adcValue);
}
/* USER CODE END DMA1_Channel1_IRQn 0 */
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
/* USER CODE END DMA1_Channel1_IRQn 1 */
}
1
2
3
4
5
6
7
8
9
10
11
12
13
LL_DMA_SetPeriphAddress(DMA1,LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
//LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,3);
LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,3*ADC_BUFF_SIZE); //修改缓冲区大小
LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_1);
LL_DMA_EnableIT_TC(DMA1,LL_DMA_CHANNEL_1);
LL_ADC_Enable(ADC1);
LL_ADC_StartCalibration(ADC1);
while(LL_ADC_IsCalibrationOnGoing(ADC1));
//LL_ADC_REG_StartConversionSWStart(ADC1);
LL_ADC_REG_StartConversionExtTrig(ADC1,LL_ADC_REG_TRIG_EXT_RISING);//修改为外部触发
LL_TIM_EnableCounter(TIM4);//使能定时器
LL_TIM_CC_EnableChannel(TIM4,LL_TIM_CHANNEL_CH4);//使能通道