打印
[开发工具]

【新定义MCU开发板测评】 4、ADC采集 串口打印

[复制链接]
828|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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

使用特权

评论回复
沙发
eefas| | 2022-12-4 21:44 | 只看该作者
ADC不同通道之间会有干扰的吗?

使用特权

评论回复
板凳
meiyaolei|  楼主 | 2022-12-4 23:03 | 只看该作者
eefas 发表于 2022-12-4 21:44
ADC不同通道之间会有干扰的吗?

暂时没有发现有干扰

使用特权

评论回复
地板
jonas222| | 2022-12-5 21:59 | 只看该作者
可以使用printf打印数据的。

使用特权

评论回复
5
meiyaolei|  楼主 | 2022-12-5 23:59 | 只看该作者
jonas222 发表于 2022-12-5 21:59
可以使用printf打印数据的。

有的

使用特权

评论回复
6
plsbackup| | 2023-1-5 16:03 | 只看该作者
最大的转换速度是多少?              

使用特权

评论回复
7
sanfuzi| | 2023-1-5 16:13 | 只看该作者
为什么串口不能打印8位字符?              

使用特权

评论回复
8
ingramward| | 2023-1-5 17:07 | 只看该作者
这个单片机的ADC通道很多。              

使用特权

评论回复
评论
meiyaolei 2023-1-5 17:52 回复TA
是的,这个MCU好玩 
9
backlugin| | 2023-1-9 12:30 | 只看该作者
串口怎么输出8位的数据呢?              

使用特权

评论回复
10
sheflynn| | 2023-1-9 14:12 | 只看该作者
这个一直printf了吗?              

使用特权

评论回复
11
kmzuaz| | 2023-1-9 14:53 | 只看该作者
这个8位的单片机有dma吗              

使用特权

评论回复
12
deliahouse887| | 2023-1-9 16:43 | 只看该作者
ADC最大的采样速度是多少?              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

100

主题

521

帖子

2

粉丝