赞
踩
目录
在1处输入72按回车,系统会自动将其他的时钟调整为相对应的配置。
为了使生成的程序可以进行在线调试,重新点击1处的Pinout&Configuration,点击SYS,在Debug处点击Serial Wire。
此处我们将14路ADC1内的14路ADC都进行AD采集并进行配置。此处我们先点击Analog下面的ADC1,然后将IN0~IN14前面的√全部点上,代表我们启用了前14路输入。
这里是ADC的最主要的配置部分,我们这里一项一项的进行详细说明:
(1)Data Alignment--->Right alignment 此项选择右对齐,保持不变。
(2)Scan Conversion Mode--->Enable 此项选择扫描模式使能,代表对15路ADC输入分别扫描,如果不使能,其将会只读取一个输入的值。
(3)Continuous Conversion Mode --->Enable 此项选择连续扫描模式,表示将连续不断的对ADC的值进行转换。如果此项不使能,将会只采集一次就会停止,直到下一次使能才继续进行一次ADC转换。
(4)Discontinuous Conversion Mode--->Disable 此项和第三项是重复的。
(5)Number of Conversion---->15 此处有多少路输入就选择多少,而且只有在此处选择数字之后下面才会出来15个不同的通道。而且此处应该是在进入ADC1中第一个需要操作的步骤,否则(2)(3)是灰色的,无法选择使能。
(6)在出现的15个Rank中,分别配置每一路,例如Rank1配置为Channel 0,采样时间55.5Cycles; Rank2配置为Channel 1,采样时间同样为55.5Cycles。此处的注意事项是,如果你不对每一路进行检查配置,可能出现好多Rank同时采集一个Channel,从而导致AD的采集数据的错误。
选择DMA Settings选项卡,点击Add,选择ADC1,然后将Mode修改为Circular,Memory地址增加,Data Width选择Half Word。配置完成。
其他的UserConstant GPIO Settings可以不用动。
选择最上面的Project Manager的Project,首先对新建的工程命名为ModbusSlave,将Application Structure更改为Basic,最后将开发工具改成自己的开发工具,我这里用的是KEIL,这里选择MDK。
然后选择Code Generator,在这个界面将Generator peripheral initalization as a pair of '.c/.h' files per peripheral前面勾选上。
最后生成代码:
在main.c函数汇总增加AdcBuf数组,然后在初始化ADC后,启动ADC校正和HAL_ADC_Start——DMA启动DMA就大功告成了。
程序代码如下:
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- uint16_t AdcBuf[15]={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_ADC1_Init();
- /* USER CODE BEGIN 2 */
- HAL_ADCEx_Calibration_Start(&hadc1);
- HAL_ADC_Start_DMA(&hadc1, (uint32_t *)AdcBuf, 15);
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
-
- }
- /* USER CODE END 3 */
- }
程序编译下载后,点开调试界面,将AdcBuf加入到监控界面,可以看到显示的数据。
在调试中,我是将第11路输入2.5V左右的电压,我们可以看一下此处的数据是0x0C1E转换成十进制为3102
在HAL库进行ADC的DMA数据采集非常容易,但是有一些细节部分需要注意,尤其是我标注红色地方,是我自己踩得坑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。