发新帖本帖赏金 3.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【F446RE开发板试用】+使用DMA连续采样8个ADC通道并串口发送

[复制链接]
1568|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
逍遥李|  楼主 | 2015-10-10 16:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 逍遥李 于 2015-10-10 16:36 编辑

开发环境:
keil v5.16
cubemx v4.10
主要功能:
1、实现DMA方式循环采样8个ADC通道,并经串口发送到PC;
2、串口发送使用UART2经printf重定向;

实现创建过程:
1】打开cubemx,选择STM32F446RE,创建工程,使能UART2,如下图所示:

2】选择ADC2,选中图中AIN0、……AIN10的8个通道

3】时钟配置,无需更改,如下图所示使用默认设置

4】配置ADC参数,这一步非常关键,一定要严格按照图示配置每一项!

5】使能ADC2的DMA功能,并进行图中所示配置:

6】UART2的配置信息使用默认即可,如图所示:

7】配置信息已经完成,可以生成代码,记得选中生成所有的.c和.h文件!

8】打开cubemx生成的工程,只需要按照下面更改main.c即可,
手边只有2个可调精密电阻,所以只测试了通道AIN0和通道AIN10,效果不错,接线和串口输出如下图所示:

9】完整工程文件见附件!新手,求指教,欢迎跟帖讨论!

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
#include "adc.h"
#include "dma.h"
#include "usart.h"
#include "gpio.h"

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

#undef __GNUC__
#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

uint16_t        ADC_value[8]={1,1,1,1,1,1,1,1};
/* USER CODE END 0 */

int main(void)
{
  uint8_t i;
  HAL_Init();

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

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC2_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
        
        HAL_Delay(10);
        HAL_ADC_Start_DMA(&hadc2,(uint32_t *)&ADC_value,8);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
        HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
        printf("Current time =: %d\r\n",HAL_GetTick());
        printf("ADC_Value= %d,%d,%d,%d,%d,%d,%d,%d;\r\n",ADC_value[0],ADC_value[1],ADC_value[2],ADC_value[3],ADC_value[4],ADC_value[5],ADC_value[6],ADC_value[7]);
        printf("\n\r\n\r");        
        for(i=0;i<8;i++)
        {
        ADC_value=0;
        }
        HAL_Delay(1000);
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

………………
………………
………………

/* USER CODE BEGIN 4 */

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
        
  return ch;
}

/* USER CODE END 4 */

ADC_DMA_Trans.part01.rar

4 MB

ADC_DMA_Trans.part02.rar

3.9 MB

打赏榜单

21ic小喇叭 打赏了 3.00 元 2015-10-30

沙发
598330983| | 2015-10-10 17:47 | 只看该作者
楼主看来是个STM32的高手啊,cubeMX用的这么老练。

使用特权

评论回复
板凳
paderboy| | 2015-10-10 18:31 | 只看该作者
多谢分享。。。支持一个。。。

使用特权

评论回复
地板
arima| | 2015-10-11 09:30 | 只看该作者
谢谢楼主分享,楼主讲得很详细。是新手入门STM32平台的参考好资料。。。

使用特权

评论回复
5
逍遥李|  楼主 | 2015-10-14 09:24 | 只看该作者
598330983 发表于 2015-10-10 17:47
楼主看来是个STM32的高手啊,cubeMX用的这么老练。

:L高手都玩的标准库……我从HAL库入门的……

使用特权

评论回复
6
hqtdzgs| | 2015-10-14 09:48 | 只看该作者
是新手的入门好资料

使用特权

评论回复
7
598330983| | 2015-10-15 15:34 | 只看该作者
逍遥李 发表于 2015-10-14 09:24
高手都玩的标准库……我从HAL库入门的……

听说标准库都被ST淘汰了,以后都不做了。已经转到HAL了。。

使用特权

评论回复
8
arima| | 2015-10-20 20:33 | 只看该作者
面包板上的电路是怎样的,有很多零件。能否手工画张图看看。

使用特权

评论回复
9
逍遥李|  楼主 | 2015-10-21 08:35 | 只看该作者
598330983 发表于 2015-10-15 15:34
听说标准库都被ST淘汰了,以后都不做了。已经转到HAL了。。

淘汰应该不至于,标准库应该也不会不做,毕竟还是之前用ST开发的人多,之前开发都要用标准库

使用特权

评论回复
10
逍遥李|  楼主 | 2015-10-21 08:36 | 只看该作者
本帖最后由 逍遥李 于 2015-10-21 10:49 编辑
arima 发表于 2015-10-20 20:33
面包板上的电路是怎样的,有很多零件。能否手工画张图看看。

这是个测试,电路连接很简单!就两个滑动变阻器,其他元件和本试验无关!


实际应用试验,复杂一点,请看下面这个帖子:
https://bbs.21ic.com/icview-1170196-1-1.html

使用特权

评论回复
11
arima| | 2015-10-21 08:43 | 只看该作者
逍遥李 发表于 2015-10-21 08:36
这是个测试,电路连接很简单!就两个滑动变阻器,气体元件和本试验无关!

謝謝樓主分享,跟著樓主學習,由淺入深。

使用特权

评论回复
12
598330983| | 2015-10-22 14:52 | 只看该作者
我觉得,HAL之所以推出,就是想ARM一统天下。早晚会消灭标准库的。

使用特权

评论回复
13
foxglove| | 2015-10-22 15:09 | 只看该作者
使用DMA连续采样8个ADC通道并串口发送

使用特权

评论回复
14
android2| | 2015-10-24 19:12 | 只看该作者
cubeMX还是比较好用的

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1315

帖子

32

粉丝