【Linux】ARM篇九--ADC实验



一、前言

本篇使用华清远见的FS4412开发板,进行ADC实验,知识点包括:ADC知识原理、开发板ADC寄存器介绍、ADC编程,并通过开发板实验现象验证ADC。


二、准备工作

  • FS4412开发板,我用的是华清远见的FS4412开发板
  • ubuntu下linux操作系统(包含交叉编译工具
  • serial-com8程序烧入执行工具
  • 开发板电路原理图、芯片手册
  • 开发程序模板

开发板资料、交叉编译工具、程序烧入工具下载(包含教程)
开发板可选择到华清远见官网进行租赁。
工程模板文件下载


三、ADC原理

ADC(Analog to Digital Converter)即模数转换器,指一个能将模拟信号转化为数字信号的电子元件。
在这里插入图片描述


ADC分辨率

ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高分辨率越高; n位的ADC能区分输入电压的最小值为满量程输入的1/2^n; 比如一个12位的ADC,最大输入电压为1.8v,那么该ADC能区分的最小电压为1.8v/2^12≈0.00044v,当转换的结果为m时,则实际的电压值为m*(1.8v/2^12)


四、开发板ADC实验电路

在这里插入图片描述
在这里插入图片描述
VDD1V8_EXT最大电压是1.8v,因此这个ADC电路的转换电压是0~1.8V


五、ADC配置寄存器

在这里插入图片描述


1、ADCCON寄存器

在这里插入图片描述

  • 转换分辨率可以设置12位10位
  • 转换结束时,转换结束标志位自动置1
  • 分频数设置只能在19~255之间,ADC最大转换时钟频率是5Mhz,转换5次为成功转换一次,因此最短转换周期为1us。
  • 使用单次转换模式时,一定要把连续转换模式关闭,单次转换模式转换一次后,该位自动变为0,需要重新置1,才能使用。

2、ADCDAT寄存器

在这里插入图片描述

  • 该寄存器的0~11位是存储转换后的数据位,因此获取时要把其他位置0,防止数据受影响。

3、ADCMUX寄存器

在这里插入图片描述

  • 该寄存器的0~3位是负责选择哪个通道。

六、ADC编程

程序功能:

电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮
电压在1001mv~1500mv时,LED2、LED3、LED4点亮
电压在501mv~1000mv时,LED2、LED3点亮
电压在0mv~500mv时,LED2闪烁
#include "exynos_4412.h"

#define LED2_ON GPX2.DAT |= (1 << 7)     
#define LED2_OFF GPX2.DAT &= (~(1 << 7))
#define LED3_ON GPX1.DAT |= (1 << 0)
#define LED3_OFF GPX1.DAT &= (~(1 << 0))
#define LED4_ON GPF3.DAT |= (1 << 4)
#define LED4_OFF GPF3.DAT &= (~(1 << 4))
#define LED5_ON GPF3.DAT |= (1 << 5)
#define LED5_OFF GPF3.DAT &= (~(1 << 5))

/**
 * @description: 延时函数
 * @param {unsigned int} i -递减的计数
 * @return {*}
 */
void delay(unsigned int i)
{
    while(i--);
}

/**
 * @description: LED2、LED3、LED4、LED5初始化 
 * @param {*}
 * @return {*}
 */
void LED_Init()
{
	/* 配置LED2、LED3、LED4、LED5的引脚为输出模式 */
    GPX2.CON |= (0x1 << 28);
    GPX1.CON |= (0x1 << 0);
	GPF3.CON |= (0x1 << 16);
	GPF3.CON |= (0x1 << 20);
}

/**
 * @description: ADC初始化 
 * @param {*}
 * @return {*}
 */
void ADC_Init()
{
	/* 配置ADC分辨率 12bit*/
	ADCCON |= (1 << 16);

	/* 打开分频器 */
	ADCCON |= (1 << 14);

	/* 配置分频系数 100,转换周期为 5/(100Mhz/100) = 5us*/
	ADCCON = ADCCON & (~(0xFF << 6)) | (99 << 6);

	/* 关闭低功耗模式 */
	ADCCON &= (~(1 << 2)); 

	/* 关闭连续转换模式 */
	ADCCON &= (~(1 << 1));

	/* 选择转换通道 */
	ADCMUX = 0x3;
}

/**
 * @description: 获取转化的电压 
 * @param {*}
 * @return {*}
 */
unsigned int ADC_do()
{
		unsigned int ADCvalue;
		
		/* 打开单次转换模式 */
		ADCCON |= 1;

		/* 检查转换是否完成 */
		while(!(ADCCON & (1 << 15)));

		/* 接收数据 */
		ADCvalue = ADCDAT & 0xFFF;

		/* 转化数据,单位:mv,m*(1.8/2^12)*1000 */
		ADCvalue *= 0.44;

		return ADCvalue;
}

int main()
{
	unsigned int ADCvalue;
	ADC_Init();
	LED_Init();
	while(1)
	{
		ADCvalue = ADC_do();
		if(ADCvalue <= 1800 && ADCvalue >= 1501)
		{
			LED2_ON;
			LED3_ON;
			LED4_ON;
			LED5_ON;
		}
		else if(ADCvalue <= 1500 && ADCvalue >= 1001)
		{
			LED2_ON;
			LED3_ON;
			LED4_ON;
			LED5_OFF;
		}
		else if(ADCvalue <= 1000 && ADCvalue >= 501)
		{
			LED2_ON;
			LED3_ON;
			LED4_OFF;
			LED5_OFF;
		}
		else if(ADCvalue <= 500 && ADCvalue >0)
		{

			LED3_OFF;
			LED4_OFF;
			LED5_OFF;

			LED2_ON;
			delay(1000000);
			LED2_OFF;
			delay(1000000);
		}
		
		printf("ADCvalue =%dmv\n", ADCvalue);
	}
	return 0;
}

七、程序烧入与实验现象

1、程序烧入

1.输入make生成.bin文件
在这里插入图片描述


2.将.bin文件复制到共享文件夹

在这里插入图片描述

在这里插入图片描述

输入:

cp ARM_LED.bin /mnt/hgfs/cca

将文件复制到cc文件夹


3.打开serial-com8,连接开发板(COM2接口),烧入程序
①查看端口
在这里插入图片描述
②打开serial-com8设置
在这里插入图片描述
在这里插入图片描述
③接通开发板电源,迅速按enter键,使其快速进入裸机模式。
在这里插入图片描述
④烧入程序
在这里插入图片描述
输入:

loadb 40008000
在这里插入图片描述

选择可执行文件烧入
在这里插入图片描述
烧入成功:
在这里插入图片描述


⑤执行程序
输入:

go 40008000


2、实验现象

在这里插入图片描述
在这里插入图片描述


到这里就结束啦!
在这里插入图片描述

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F407是一款由STMicroelectronics生产的32位ARM Cortex-M4微控制器,而IAR是一种集成开发环境(IDE),可用于开发嵌入式系统的软件。在使用IAR进行STM32F407教学时,以下是一些需要考虑的重要方面: 1. 硬件准备:首先,需要准备一块STM32F407开发板和相关的外设,如USB线、串口线等。确保开发板正确连接到计算机。 2. 安装IAR:从IAR官方网站或其他信誉可靠的来源下载并安装IAR IDE。根据操作系统的要求进行安装,并确保安装了与STM32F407兼容的版本。 3. 创建工程:在IAR IDE中,创建一个新的工程,选择STM32F407为目标设备,并选择适当的编译器选项。 4. 编写代码:使用C或C++编写与STM32F407控制器交互的代码。这可以是任何功能,如GPIO控制、定时器、ADC、串口通信等。 5. 调试程序:在IAR中提供了调试器,可用于在开发板上进行实时调试。可以检查变量的值,查看寄存器状态并跟踪程序执行流程。 6. 烧录程序:将编译后的程序通过烧录工具(如ST-Link)烧录到STM32F407控制器中。确保正确连接烧录工具和目标设备。 7. 测试和调试:将烧录完成的程序在目标设备上测试,并通过IAR IDE进行必要的调试和修复。 总结:在使用IAR进行STM32F407教学时,学生应通过理解并实际应用相关的开发流程,包括创建工程、编写代码、调试、烧录和测试等步骤,用于开发嵌入式系统。这些步骤将有助于学生对STM32F407微控制器的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修成真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值