STM32MP157 ADC驱动

STM32MP157 ADC简介
  STM32MP157 有两个 ADC:ADC1 和 ADC2,ADC1 和 ADC2 紧密耦合,可在双重模式下运行(ADC1 为主器件)。每个 ADC 由一个 16 位逐次逼近模数转换器组成,每个 ADC 有 20 个通道,每个通道支持单次、连续、扫描或不连续采样模式。转换结果存储在一个左对齐或右对齐的 32 位数据寄存器中。ADC 主要特性如下:

① 多达 2 个 ADC,可在双重模式下运行
② 可以配置为 16、14、12、10 或 8 位分辨率
③ 自校准
④ 可独立配置各通道采样时间

STM32MP157 有 2 个 ADC,因此对应 2 个 ADC 控制器,在设备树里就有 2 个 ADC控制器节点。这 2 个 ADC 的设备树节点内容都是一样的,除了 reg 属性不同。本节使用 PA5 引脚来完成 ADC 驱动开发,该引脚是 ADC1_INP19 通道引脚。stm32mp151.dtsi 文件中的 adc 节点信息如下:        

1.修改设备树

ADC 驱动已经由 ST 编写好,只需要修改设备树即可。
在 stm32mp15-pinctrl.dtsi 中添加 ADC 使用的 PA5 引脚配置信息:

adc1_in19_pins_a: adc1-in19 {
	pins {
		pinmux = <STM32_PINMUX('A', 5, ANALOG)>;
	};
};

 然后在 stm32mp157d-atk.dts 文件中向根节点添加 vdd 子节点:

vdd: regulator-vdd {
	compatible = "regulator-fixed";
	regulator-name = "vdd";
	regulator-min-microvolt = <3300000>;
	regulator-max-microvolt = <3300000>;
	regulator-always-on;
	regulator-boot-on;
};

最后在 stm32mp157d-atk.dts 文件中向 adc 节点追加一些内容:

&adc {
	pinctrl-names = "default";
	pinctrl-0 = <&adc1_in19_pins_a>;
	vdd-supply = <&vdd>;
	vdda-supply = <&vdd>;
	vref-supply = <&vdd>;
	status = "okay";

	adc1: adc@0 {
		st,adc-channels = <19>;
		st,min-sample-time-nsecs = <10000>;
		assigned-resolution-bits = <16>;
		status = "okay";
	};
};

 ①配置adc引脚
②设置电压属性
③adc1 子节点,st,adc-channels 属性设置 adc 通道为 19,st,min-sample-time-nsecs 属性设置最小采样时间为 10000ns;设置分辨率为16位

2.使能 ADC 驱动

在 Linux 内核的 menuconfig 中,使能自带的 ADC 驱动:
在这里插入图片描述
修改完成后,就可以编译出设备树文件和系统镜像文件,启动开发板

启动开发板后,在 /sys/bus/iio/devices 目录下,会存在 ADC 对应的 iio 设备,在该目录中存在以下文件:
in_voltage19_raw:ADC1 通道 19 原始值文件
in_voltage_offset:ADC1 偏移文件
in_voltage_scale:ADC1 比例文件(分辨率),单位为 mV。实际电压值(mV)=in_voltage19_raw* in_voltage_scale / 1000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值