求一个MM32SPIN0230的ADC采集例程

[复制链接]
 楼主| MM957234 发表于 2024-4-27 21:13 | 显示全部楼层 |阅读模式
项目紧急求好心人提供一个求一个MM32SPIN0230的ADC采集例程,官网的还需要移植删减有点麻烦,谢谢叩头
 楼主| MM957234 发表于 2024-4-27 21:15 | 显示全部楼层

求一个MM32SPIN0230的ADC采集例程

能编译通过的,ADC DMA采集即可,谢谢
yangjiaxu 发表于 2024-5-18 10:01 | 显示全部楼层
你试试这个
  1. #include "mm32.h"

  2. #define ADC_CHANNEL 0
  3. #define ADC_SAMPLE_COUNT 10

  4. uint16_t adc_data[ADC_SAMPLE_COUNT];

  5. void ADC_DMA_Init()
  6. {
  7.     // 初始化ADC
  8.     ADC_InitTypeDef ADC_InitStruct;
  9.     ADC_InitStruct.ADC_Mode = ADC_Mode_Continue;
  10.     ADC_InitStruct.ADC_ScanMode = DISABLE;
  11.     ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
  12.     ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
  13.     ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  14.     ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  15.     ADC_InitStruct.ADC_NbrOfChannel = 1;
  16.     ADC_Init(ADC1, &ADC_InitStruct);

  17.     // 配置ADC通道
  18.     ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_Samctl_239_5);

  19.     // 初始化DMA
  20.     DMA_InitTypeDef DMA_InitStruct;
  21.     DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));
  22.     DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)adc_data;
  23.     DMA_InitStruct.DMA_Direction = DMA_DIR_PeripheralSRC;
  24.     DMA_InitStruct.DMA_BufferSize = ADC_SAMPLE_COUNT;
  25.     DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  26.     DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
  27.     DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  28.     DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  29.     DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
  30.     DMA_InitStruct.DMA_Priority = DMA_Priority_High;
  31.     DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
  32.     DMA_Init(DMA1_Channel1, &DMA_InitStruct);

  33.     // 启动DMA
  34.     DMA_Cmd(DMA1_Channel1, ENABLE);

  35.     // 启动ADC
  36.     ADC_Cmd(ADC1, ENABLE);
  37.     ADC_DMACmd(ADC1, ENABLE);
  38. }

  39. int main()
  40. {
  41.     // 初始化系统时钟等

  42.     // 初始化ADC和DMA
  43.     ADC_DMA_Init();

  44.     while (1)
  45.     {
  46.         // 等待DMA传输完成
  47.         while (!DMA_GetFlagStatus(DMA1_FLAG_TC1))
  48.         {
  49.         }

  50.         // 数据处理
  51.         for (int i = 0; i < ADC_SAMPLE_COUNT; i++)
  52.         {
  53.             // 处理adc_data[i]
  54.         }

  55.         // 清除DMA传输完成标志
  56.         DMA_ClearFlag(DMA1_FLAG_TC1);
  57.     }
  58. }
但需要自己改哈,肯定不能直接编译通过的,可以参考一下思路
huquanz711 发表于 2024-5-21 07:49 来自手机 | 显示全部楼层
论坛上很多分享贴,自己看看吧。
Betty1299 发表于 2024-5-23 11:51 | 显示全部楼层
话说官方没有提供相关例程?
Annie556 发表于 2024-5-23 13:04 | 显示全部楼层
其实你可以用原厂提供的例程进行修改的哈,这个简单一些
Carmen7 发表于 2024-5-23 14:11 | 显示全部楼层
你说的ADC有,DMA好像官方没有配合弄吧,其实你可以自己试试融合进去
Alina艾 发表于 2024-5-23 15:19 | 显示全部楼层
参考ST的例程就行吧,灵动的代码风格和ST的风格很像的
Charlotte夏 发表于 2024-5-23 16:23 | 显示全部楼层
我建议啊,还是自己改一个吧,有哪里不懂可以在社区里咨询嘛
Estelle1999 发表于 2024-5-23 17:33 | 显示全部楼层
这种应该是在例程上修改的,估计很容易吧,在这里要估计费劲一些
Betty996 发表于 2024-5-24 06:52 | 显示全部楼层
我觉得你可以先用ADC的例程,然后再研究一下DMA,然后就融合一下呗
alxd 发表于 2024-5-24 08:10 | 显示全部楼层
自己改改吧,这里给你的例程估计也不一定靠谱,也不一定好用
Emily999 发表于 2024-5-24 10:36 | 显示全部楼层
你自己弄呗,你是移植不好啊?还是编译出错不理解?
Candic12e 发表于 2024-5-24 11:30 | 显示全部楼层
可以按照MM32其他的与ADC与DMA相关的例程进行移植到MM32PIN0230试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部