OpenEdv-开源电子网

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

AD采样通过DMA存到外部SRAM问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-7-17
在线时间
11 小时
发表于 2020-5-19 23:59:47 | 显示全部楼层 |阅读模式
16金钱
通过time8出发AD进行周期采样,并通过dma存储到外部1M的SRAM。目前遇到问题,正常给用变量循环给SRAM赋值操作没有问题,通过HAL库函数HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&ADC_Buff, 80000);当写入50000个字节是正常的,写入80000个字节时发现SRAM内只写入了14000多个字节。

uint8_t ADC_Buff[1000000] __attribute__((at(0X68000000)));//测试用数组
int main(void)
{
  /* USER CODE BEGIN 1 */
    uint32_t ts=0;
    uint16_t a=0;
    uint8_t temp=0;
   
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_FSMC_Init();
  MX_ADC1_Init();
  MX_TIM8_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
    for(ts=0;ts<80000;ts++)ADC_Buff[ts]=111;//预存测试数据   
    HAL_TIM_Base_Start(&htim8);
    HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&ADC_Buff, 80000);
   
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        //printf("step1 \n");
        HAL_Delay(10000);
        printf("start \n");
        //HAL_Delay(10000);
        HAL_ADC_Stop_DMA(&hadc1);
        //printf("start \n");
        //HAL_Delay(10000);
        //a=hdma_adc1.Instance->NDTR;
        //printf("a=%d \n",a);
        
        for(ts=0;ts<80000;ts++)
        {
            //FSMC_SRAM_ReadBuffer(&temp,ts,1);
            
            //printf("adc0=%d \n",temp);
            //HAL_Delay(1);
            printf("adc1=%d \n",ADC_Buff[ts]);
            //HAL_Delay(10);
            //printf("temp=%d \n",temp);
            //HAL_Delay(10);
            printf("ts=%d \n",ts);
            //HAL_Delay(1);
        //a=hdma_adc1.Instance->NDTR;
            //printf("a=%d \n",a);
        }
        printf("stop \n");
        while (1);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


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

使用道具 举报

0

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-19 23:59:49 | 显示全部楼层
虽然我不懂,但还是帮顶!
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-1-10
在线时间
9 小时
发表于 2020-7-10 14:28:13 | 显示全部楼层
dma传输最大数据量是65536
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-1-10
在线时间
9 小时
发表于 2020-7-10 14:28:52 | 显示全部楼层
你的初始化程序能给我借鉴一下吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 23:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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