4749|5

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求stm32无线NRF带双通道ADC程序 [复制链接]

急求于基于STM32F103C8BT的无线传输带双通道ADC的源程序,手上有无线NRF转USB通讯的程序,也有ADC的程序,但是缺少将他们融合在一起的程序……那位高手能指点一下

 

此帖出自stm32/stm8论坛

最新回复

您已成功购买本附件,现在将转入附件下载。  详情 回复 发表于 2011-8-18 13:31
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 mahe6562 的帖子

这种融合不难的,只要你以一个工程为基础增加相应的文件就可以了
目前遇到的问题是什么?
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

融合已经完成,目前只做出一个通道的ADC,用的是有DMA的,ADC2,通道2,转换结果AD_value=ADC_GetConversionValue(ADC2);然后无限发射给另一个NRF,NRF通过转USB虚拟串口发给上位机,上位机也能正常接收到转换结果,但是不知双通道的ADC怎么做,想加个通道1,需要怎么改……

 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

…………………… 

ADC_InitStructure.ADC_NbrOfChannel = 2;

……………………

ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);   

  ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);

 

……………………

ad_value[]=ADC_GetConversionValue(ADC2)

 

是这样么?

 

[ 本帖最后由 mahe6562 于 2011-8-15 22:59 编辑 ]
此帖出自stm32/stm8论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发 daicheng 的帖子

融合已经完成,目前只做出一个通道的ADC,用的是有DMA的,ADC2,通道2,转换结果AD_value=ADC_GetConversionValue(ADC2);然后无限发射给另一个NRF,NRF通过转USB虚拟串口发给上位机,上位机也能正常接收到转换结果,但是不知双通道的ADC怎么做,想加个通道1,需要怎么改…… GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

 GPIO_Init(GPIOA, &GPIO_InitStructure);

……………………

ADC_InitStructure.ADC_NbrOfChannel = 2;

……………………

ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);

……………………

AD_value=ADC_GetConversionValue(ADC2) 是这样么?

 

可是这样接收到的数据是这样的

The current AD value = 0x0FFF
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0FFF
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0000
The current AD value = 0x0FFF


(我一个脚测5V一个脚测0v)

[ 本帖最后由 mahe6562 于 2011-8-15 23:10 编辑 ]
此帖出自stm32/stm8论坛
 
 
 

回复

2131

帖子

0

TA的资源

至上芯片

5
 

回复 4楼 mahe6562 的帖子

简单说一下吧 参考一下
GPIO 配置

                                // AD1          AD2       AD3        AD4
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5|GPIO_Pin_6 |GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

void ADC_Configuration(void)
{
   ADC_InitTypeDef           ADC_InitStructure;

   /* Initializes the ADC1 peripheral configuration*/
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;      //ADC_Mode value
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;            //ADC_ScanConvMode value
   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;     //ADC_ContinuousConvMode value
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; //ADC_ExternalTrigConv value
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  //ADC_DataAlign value
   ADC_InitStructure.ADC_NbrOfChannel = ADC_ScanCh;        //ADC_NbrOfChannel value
   ADC_Init(ADC1, &ADC_InitStructure);


   ADC_RegularChannelConfig(ADC1, ADC_Channel_14,  1, ADC_SampleTime_13Cycles5);  //pin: PC4
   ADC_RegularChannelConfig(ADC1, ADC_Channel_15,  2, ADC_SampleTime_13Cycles5);  //pin: PC5
   ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_13Cycles5);  //pin: PB0
   ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 4, ADC_SampleTime_13Cycles5);  //pin: PB1
   ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 5, ADC_SampleTime_55Cycles5);  //temperature
   ADC_TempSensorVrefintCmd(ENABLE);
   ADC_DMACmd(ADC1, ENABLE);
   ADC_ExternalTrigConvCmd(ADC1, ENABLE);

   ADC_Cmd(ADC1, ENABLE);   
   ADC_ResetCalibration(ADC1);
   while(ADC_GetResetCalibrationStatus(ADC1));

   ADC_StartCalibration(ADC1);
   while(ADC_GetCalibrationStatus(ADC1));
}

void DMA_Configuration(void)
{

  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;               //DMA_PeripheralBaseAddr value
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertValueTab;          //DMA_MemoryBaseAddr value
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                        //DMA_DIR value
  DMA_InitStructure.DMA_BufferSize = ADC_ScanCh*ADC_ConvertNum;               
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;          //DMA_PeripheralInc value
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                   //DMA_MemoryInc value
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //DMA_PeripheralDataSize value
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;       //DMA_MemoryDataSize value
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                           //DMA_Mode value
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;                       //DMA_Priority value
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                              //DMA_M2M value
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  //DMA_Cmd(DMA1_Channel1, ENABLE);

注意关DMA与AD的顺序

}
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

6
 
您已成功购买本附件,现在将转入附件下载。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表