OpenEdv-开源电子网

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

求助光敏传感器DMA传输问题

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-12-6
在线时间
3 小时
发表于 2021-12-6 20:11:20 | 显示全部楼层 |阅读模式
1金钱
所有的源码都在附件里 求助 为什么 没有数据传输到串口助手里。 感谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-12-6
在线时间
3 小时
 楼主| 发表于 2021-12-7 10:14:34 | 显示全部楼层
  1. #include "stm32f4xx.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "lsens.h"
  5. #include "Adc.h"
  6. #include "dma.h"

  7. #define LSENS_READ_TIMES 5

  8. void Lsens_Init(void)
  9. {
  10.         GPIO_InitTypeDef GPIO_InitStructure;
  11.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
  12.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;
  13.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
  14.         GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
  15.         GPIO_InitStructure.GPIO_Speed=GPIO_High_Speed;
  16.         GPIO_Init(GPIOF,&GPIO_InitStructure);
  17. }

  18. void Adc3_Init(void)
  19. {
  20.         ADC_InitTypeDef ADC_InitStructure;
  21.         ADC_CommonInitTypeDef ADC_CommonInitStructure;
  22.        
  23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);
  24.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,ENABLE);
  25.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,DISABLE);
  26.        
  27.         ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
  28.         ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
  29.         ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
  30.         ADC_InitStructure.ADC_NbrOfConversion=1;
  31.         ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;
  32.         ADC_InitStructure.ADC_ScanConvMode=DISABLE;
  33.         ADC_Init(ADC3,&ADC_InitStructure);
  34.        
  35.         ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_1;
  36.         ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;
  37.         ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4;
  38.         ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
  39.         ADC_CommonInit(&ADC_CommonInitStructure);
  40.        
  41.         ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_480Cycles );       
  42.         ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);
  43.         ADC_DMACmd(ADC3, ENABLE);
  44.         ADC_Cmd(ADC3,ENABLE);
  45. }

  46. void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx,u32 par,u32 mar,u16 ndtr)
  47. {

  48.         DMA_InitTypeDef  DMA_InitStructure;
  49.         NVIC_InitTypeDef NVIC_InitStructure;
  50.         if((u32)DMA_Streamx>(u32)DMA2)
  51.         {
  52.           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
  53.                
  54.         }else
  55.         {
  56.           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
  57.         }
  58.   DMA_DeInit(DMA_Streamx);
  59.        
  60.         while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){}
  61.        
  62.   DMA_InitStructure.DMA_Channel = chx;  
  63.   DMA_InitStructure.DMA_PeripheralBaseAddr = par;
  64.   DMA_InitStructure.DMA_Memory0BaseAddr = mar;
  65.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  66.   DMA_InitStructure.DMA_BufferSize = ndtr;
  67.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  68.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  69.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  70.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  71.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  72.   DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
  73.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  74.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  75.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  76.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  77.   DMA_Init(DMA_Streamx, &DMA_InitStructure);
  78.        
  79.   DMA_ClearFlag(DMA2_Stream0,DMA_IT_TC);
  80.   DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);


  81.         NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream0_IRQn;
  82.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;                     
  83.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;                           
  84.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  85.         NVIC_Init(&NVIC_InitStructure);
  86.        
  87.         while (DMA_GetCmdStatus(DMA2_Stream0) != DISABLE){}
  88.         DMA_Cmd(DMA2_Stream0, ENABLE);
  89. }

  90. u16 Get_Adc3(u8 ch)
  91. {
  92.         ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_480Cycles );
  93.         ADC_SoftwareStartConv(ADC3);
  94.         while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));
  95.         return ADC_GetConversionValue(ADC3);
  96. }

  97. u8 Lsens_Get_val(void)
  98. {
  99.         u32  temp_val=0;
  100.         u8 t;
  101.         for(t=0;t<LSENS_READ_TIMES;t++)
  102.         {
  103.                 temp_val+=Get_Adc3(ADC_Channel_5);
  104.                 delay_ms(5);
  105.         }
  106.         temp_val/=LSENS_READ_TIMES;
  107.         return temp_val;
  108. }

  109. void DMA2_Stream0_IRQHandler(void)
  110. {
  111.         if (DMA_GetFlagStatus(DMA2_Stream0, DMA_IT_TCIF2) == SET)  
  112.         {
  113.                 Lsens_Get_val();
  114.                 DMA_ClearFlag(DMA2_Stream0, DMA_IT_TCIF2);
  115.         }
  116. }
  117.         u16 ADC_Data[LSENS_READ_TIMES];
  118.         u8 adcx;

  119. int main(void)
  120. {
  121.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  122.         delay_init(168);     
  123.         uart_init(115200);                                       
  124.         Adc3_Init();         
  125.         MYDMA_Config(DMA2_Stream0, DMA_Channel_2, (u32)&ADC3->DR, (u32)ADC_Data,LSENS_READ_TIMES);
  126.         ADC_SoftwareStartConv(ADC3);               
  127.         while(1)
  128.         {  
  129.                 adcx=Lsens_Get_val();
  130.                 printf("%8u\n",adcx);
  131.                 delay_ms(250);       
  132.         }
  133. }
复制代码
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-12-6
在线时间
3 小时
 楼主| 发表于 2021-12-7 10:15:45 | 显示全部楼层
代码如上 求大神指点 因为不知道是什么原因把所有的C文件都合并在一起了  可能影响阅读 抱歉。
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-12-7 10:22:02 | 显示全部楼层
帮顶      
回复

使用道具 举报

1

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2020-3-15
在线时间
28 小时
发表于 2021-12-8 09:36:50 | 显示全部楼层
手机助手?,你是用了什么TCP协议吗
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-12-6
在线时间
3 小时
 楼主| 发表于 2021-12-8 20:01:38 | 显示全部楼层
STM32TSZ 发表于 2021-12-8 09:36
手机助手?,你是用了什么TCP协议吗

串口调试助手。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 22:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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