本帖最后由 meiyaolei 于 2022-11-24 00:40 编辑
把ADC采集的值,通过串口打印在电脑PC端,每次循环都会打印,并有LED指示工作状态。
串口使用的是串口1,波特率是115200.端口是串口5.
ADC采集是选用AN2,是MCU的23脚。
LED显示,每进一次就闪烁一下循环。
串口就是使用板载上的CH340,TYPEC
打印的值:
示例代码:
AD采集的值打印出来
uint ADCValue = 0x0000;
ADCValue = ADC_GetConversionAverageValue(ADC_SamplesNum_EightTimes);//把ADC采集的值给VALUE
printf("ADC通道2的采样值为%d\r\n",ADCValue);
Delay(1000);
P01= ~P01;//第进来一次,灯转换一次。
AD转换的平均数据
uint8_t tmpCnt = 0;
uint16_t tmpValueSum = 0, tmpValue = 0;
uint16_t tmpValue_Max = 0, tmpValue_Min = 0xFFFF;
bit tmpStaus = EADC;
EADC = 0;
for(tmpCnt = 0; tmpCnt < ADC_SamplesNum; tmpCnt ++)
{
ADC_StartConversion(); //开启一次ADC转换
while(!ADC_GetFlagStatus()); //等待ADC转换结束
ADC_ClearFlag(); //清除ADC转换标志位
tmpValue = ADC_GetConversionValue(); //获取单次转换值
/* 获取多次转换值中的最大值 */
if(tmpValue > tmpValue_Max)
tmpValue_Max = tmpValue;
/* 获取多次转换值中的最小值 */
if(tmpValue < tmpValue_Min)
tmpValue_Min = tmpValue;
tmpValueSum += tmpValue;//累加多次转换值的和
}
/* 通过硬件乘除法器来计算平均值 */
{
OPERCON |= 0X40;
/* 被除数为16位数据 */
tmpValueSum -= (tmpValue_Max + tmpValue_Min);
EXA0 = tmpValueSum;
EXA1 = tmpValueSum >> 8;
EXBL = ADC_SamplesNum - 2; //除数为8位数据
OPERCON |= 0x80; //开始除法计算
while(OPERCON & 0x80); //等待计算完毕
//获取商
tmpValue = (uint16_t)EXA0;
tmpValue |= EXA1 << 8;
}
EADC = tmpStaus; //恢复EADC
return tmpValue; //返回平均值
串口:
uint8_t RxData[10] = 0;
UART0_HandleInfo.TxState = UART0_HandleInfo.RxState = UART0_STATE_READY;
//接收10Byte的数据
if(UART0_Receive_IT(&UART0_HandleInfo, RxData, 10) == Status_OK)
{
while(!UartReceiveFlag);
UartReceiveFlag = 0;
//发送接收到的数据
if(UART0_Transmit_IT(&UART0_HandleInfo, RxData, 10) == Status_OK)
{
while(!UartSendFlag);
UartSendFlag = 0;
}
视频:
https://www.bilibili.com/video/BV18G4y1d7A8/?vd_source=0e4686609dd9c60a63b3f7fe54080c03
|