你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Nucleo-32F042K6 DMA采集ADC

[复制链接]
电子星辰 发布时间:2018-6-20 11:10
本帖最后由 电子星辰 于 2018-6-20 17:05 编辑

这是一个基于STM32F042K6T6的Nucleo板,使用Cube配置,通过过DMA连续采集较多采样数的ADC单通道程序。

首先先在Cube新建工程,选择Board Selector标签,在搜索框里打042即可。
新建工程.JPG

选择之后会弹出一个选择是否初始化外设为默认设置的弹窗,选择“YES”的话,时钟、串口、调试什么的它就给你设置好了。选“NO”就全部自己设置。这里我选的是YES。
初始化选择.JPG

“Pinout”标签页里的串口默认设置就可以(Nucleo板042K6是使用的USART2,就那个MicroUSB接口,既可以下载也可以串口传输),ADC中勾选IN0。
串口pinout.JPG
ADCpinout.JPG
芯片pinout.JPG

“Clock Configuration”标签页里,我喜欢主频设为最高,直接把HCLK改成最高48然后回车,它就自己给你弄好。
时钟设置.JPG

“Configuration”标签页里,先设置USART2,参数设置如图,因为我不需要接收就不勾选中断了。
串口参数设置.JPG
ADC设置我先要添加DMA,模式选择连续模式Circular,这样就在循环前设置一下,以后直接取数据就行了。数据长度DATA Width一定要注意,12位的ADC两个都选半字,在代码里只取12位,如果使用全字然后代码里又没取对,那就会数据异常。
ADC的DMA设置.JPG
ADC参数设置.JPG

最后是生成工程,点击图中红框图标,第一次会弹出设置窗口,以后再点会直接生成。如果想再设置,就在菜单栏里的工程菜单里点设置。
工程设置.JPG 工程设置2.JPG
至此Cube设置完成

附部分代码,特别说一下DMA采集函数里的ADC_ConvertedData[(ADC_SAMPLE * ADC_NUMOFCHANNEL)]这个地址,因为我设置的是半字传输,所以必须是16位,如果设成32位,数据就会异常(例如2个数据叠加)。
  1. /* USER CODE BEGIN 0 */
  2. /* ADC variables */
  3. __IO uint16_t ADC_ConvertedData[(ADC_SAMPLE * ADC_NUMOFCHANNEL)];//AD转换结果值
  4. __IO float ADC_ConvertedValueLocal[ADC_NUMOFCHANNEL];// 以浮点数保存转换计算后的电压值
  5. /* USER CODE END 0 */

  6. int main(void)
  7. {
  8.   /* USER CODE BEGIN 1 */
  9.   uint16_t out_en_cnt=0;
  10.   /* USER CODE END 1 */

  11.   /* MCU Configuration----------------------------------------------------------*/

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

  14.   /* USER CODE BEGIN Init */

  15.   /* USER CODE END Init */

  16.   /* Configure the system clock */
  17.   SystemClock_Config();

  18.   /* USER CODE BEGIN SysInit */

  19.   /* USER CODE END SysInit */

  20.   /* Initialize all configured peripherals */
  21.   MX_GPIO_Init();
  22.   MX_DMA_Init();
  23.   MX_USART2_UART_Init();
  24.   MX_ADC_Init();
  25.   /* USER CODE BEGIN 2 */
  26.   HAL_ADCEx_Calibration_Start(&hadc);//启动ADC自校验
  27.   HAL_ADC_Start_DMA(&hadc,(uint32_t *)ADC_ConvertedData,(ADC_SAMPLE*ADC_NUMOFCHANNEL));//启动AD转换并使能DMA传输和中断
  28.         HAL_Delay(30);//等待第一轮ADC数据采集完成
  29.   /* USER CODE END 2 */

  30.   /* Infinite loop */
  31.   /* USER CODE BEGIN WHILE */
  32.   while (1)
  33.   {
  34.                 HAL_Delay(30);//一次采样+转换时间=(239.5+12.5)周期/14MHz=18us,延时30ms
  35.     adc_getvalue();
  36.                
  37.     if(++out_en_cnt == USART_TIMES)
  38.                 {
  39.                         out_en_cnt = 0;
  40.                         HAL_Delay(500);
  41.                         printf("CHANNEL_0:%.2f\r\n",ADC_ConvertedValueLocal[0]);
  42. }
  43. }
复制代码

最后,附完整工程。



Nucleo-32F042K6 DMA采集ADC(MDK).rar

下载

4.99 MB, 下载次数: 900

收藏 2 评论8 发布时间:2018-6-20 11:10

举报

8个回答
zero99 回答时间:2018-6-20 11:20:07
学习了
STMCU 回答时间:2018-6-20 14:35:04
很详细。学习了!
时光虫子 回答时间:2018-6-20 15:52:58
Cube软件用的爽啊,开发效率高
电子星辰 回答时间:2018-6-20 16:03:38
时光虫子 发表于 2018-6-20 15:52
Cube软件用的爽啊,开发效率高

cube确实用起很方便,但感觉还不完善。有时候出问题就一直解决不了。。。
wolfgang2015 回答时间:2018-6-20 22:28:45
不错的内容,继续努力~~
andeyqi 回答时间:2018-6-21 13:17:11
赞一个
samhong 回答时间:2019-1-30 00:54:18
学习了,学习了!
alvad 回答时间:2019-4-19 17:09:04
学习了。很不错

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版