OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2965|回复: 7

新手帖 求助 如何将ADC采集的数据通过串口发给PC?不会写出程序

[复制链接]

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-2-16 11:40:39 | 显示全部楼层 |阅读模式
1金钱
void usart1_init(void)
{
        GPIO_InitTypeDef GPIO_InitStrue;//¶¨òåGPIO½á11ìå
        USART_InitTypeDef USART_InitStrue;
        NVIC_InitTypeDef NVIC_InitStrue;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ê1Äü
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//íÆíì¸′óà TX¶&#203A9
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStrue);
       
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë RX¶&#203A10
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStrue);
       
        USART_InitStrue.USART_BaudRate=115200;
        USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStrue.USART_Parity=USART_Parity_No;
        USART_InitStrue.USART_StopBits=USART_StopBits_1;
        USART_InitStrue.USART_WordLength=USART_WordLength_8b;
       
       

       
        USART_Init(USART1,&USART_InitStrue);
       
        USART_Cmd(USART1,ENABLE);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//½óêü·Ç
       
        NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
       
        NVIC_Init(&NVIC_InitStrue);

       
       
       
}       


void Adc_INIT(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
          ADC_InitTypeDef  ADC_InitStruct;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//
       
       
               
                       
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                 //PA1 ¶Ë¿úÅäÖÃ
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //Ä£ÄaêäèëÄ£ê½
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
                GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOA1

          RCC_ADCCLKConfig(RCC_PCLK2_Div8);// APB2Îa72MHZ, ADC ×î′ó½óêü14MHZ 1ê·ÖÆμòa′óóú5.5       //12MHZê±Îa′ïμ½125HZ2éÑùÆμÂ꣬ó|Îa83.5ÖüÆú  μ«êÇÖ»óD142HZ
       
                                                                //9MHZê±Îa′ïμ½125HZ2éÑùÆμÂ꣬ó|Îa59.5ÖüÆú  μ«êÇ×î½ó½üÎa132hz
       
                ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;//

                ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Left;//
                ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//2»ê1óÃía2¿′¥·¢
                ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//¶àá¢Ä£ê½
                ADC_InitStruct.ADC_NbrOfChannel=1;//μ¥¶àí¨μà
                ADC_InitStruct.ADC_ScanConvMode=DISABLE;//é¨ÃèÄ£ê½1رÕ
          ADC_Init(ADC1, & ADC_InitStruct);//ADC1Ïà1ؽá11ì嶨òå
               
       
                ADC_Cmd(ADC1, ENABLE);//ê1ÄüADC

    ADC_ResetCalibration(ADC1);//ADC¸′λD£×¼ê1Äü
                while (ADC_GetResetCalibrationStatus(ADC1));//μè′y¸′λD£×¼½áêø
       
          ADC_StartCalibration(ADC1);//¿aÆôADD£×¼
                while  (ADC_GetCalibrationStatus(ADC1));//μè′yD£×¼½áêø


               

}


u16 Get_ADC(u8 ch)
{
                ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_55Cycles5);
                ADC_SoftwareStartConvCmd(ADC1, ENABLE);
                while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//»ñè¡Çé¿ö£¬μè′y×a»»½áêø
               
                return ADC_GetConversionValue(ADC1);//
       
}


u16 Get_ADC_average(u8 ch, u8 times)
{
                u32 temp_val=0;
                u8 t;
                for(t=0;t<times;t++)
                {
                        temp_val+=Get_ADC(ch);
                        delay_ms(5);
                }
                return temp_val/times;
                       
}

int main(void)
{               
        u16 adcx;
        u16 adcx1;
        float temp;
        u8 t=0;
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //éè&#214;&#195;NVIC&#214;D&#182;&#207;·&#214;×é2:2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        usart1_init();
        Adc_INIT();
         
       
        while(1){
        adcx=Get_ADC_average(ADC_Channel_1,10);
        temp=(float)adcx*(3.3/4096);//×a&#187;ˉ&#206;aμ&#231;&#209;1
        adcx1=(int)temp;
        USART_SendData(USART1,adcx1);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        }
}
主程序不知道怎么写 求教


最佳答案

查看完整内容[请看2#楼]

可以用串口打印 printf("AD1=%d\n",AD_Value[0]); printf("\r\n volta1 = %f V \r\n",volta[0]); 参考帖子看下 http://www.openedv.com/forum.php?mod=viewthread&tid=276626&extra=
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-2-16 11:40:40 | 显示全部楼层
可以用串口打印
printf("AD1=%d\n",AD_Value[0]);        printf("\r\n volta1 = %f V \r\n",volta[0]);
参考帖子看下
http://www.openedv.com/forum.php ... d=276626&extra=
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

0

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2018-12-31
在线时间
12 小时
发表于 2019-2-16 12:15:06 | 显示全部楼层
管理员会给你答案的啊!
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2019-2-16 12:49:20 | 显示全部楼层
例程不是有现成的吗
回复

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
 楼主| 发表于 2019-2-16 13:01:01 | 显示全部楼层
历程的是用LED_SHOW这个函数
我想找原型理解一下的 本意想用
USART_SendData这个函数但是没有效果。。
回复

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
 楼主| 发表于 2019-2-16 14:01:09 | 显示全部楼层
1208大佬,我想问一下,DMA存取之后,怎么用串口显示???
回复

使用道具 举报

1

主题

9

帖子

0

精华

高级会员

Rank: 4

积分
915
金钱
915
注册时间
2018-3-3
在线时间
68 小时
发表于 2019-2-17 09:50:24 | 显示全部楼层
printf就可以啊
回复

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
 楼主| 发表于 2019-2-17 11:16:20 | 显示全部楼层
谢谢-、- 利用ADC+DMA软件触发+串口打印是可以的!谢谢0.0好贴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 19:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表