RT-Thread-1-ADC
一、 初始化设备stm32_adc_init()
进行板级初始化
1.1定义adc_config数组
数组中有几个值通过board.h中的宏定义来确定,同时数组中的最后一个元素后面在某些标准下是被允许加逗号的
如果打开ADC1和ADC2,那么
1 | adc_config[] ={ADC1_CONFIG,ADC3_CONFIG}; |
1.2 ADC1_CONFIG是什么
1.3 ADC_HandleTypeDef是什么类型
是 STM32 HAL(硬件抽象层)库 中的一个结构体,用于表示 ADC(模拟到数字转换器) 外设的配置和状态
Instance
- 类型:
ADC_TypeDef *
- 描述:指向 ADC 模块寄存器的指针。不同的 STM32 微控制器有多个 ADC 模块(如
ADC1
,ADC2
,ADC3
等),Instance
用于标识当前操作的是哪个 ADC 模块。
Init
类型:
ADC_InitTypeDef
描述
:包含 ADC 初始化配置的结构体。它包含了多个配置选项,如 ADC 时钟、分辨率、数据对齐方式等。
1
ADC_InitTypeDef
是一个结构体,通常包括以下字段:
ClockPrescaler
:ADC 时钟的预分频器。Resolution
:ADC 分辨率(如 12 位、10 位、8 位)。DataAlign
:数据对齐方式(如左对齐或右对齐)。ScanConvMode
:是否启用扫描模式(多个通道转换)。ContinuousConvMode
:是否启用连续转换模式。ExternalTrigConv
:外部触发类型(如软件触发、定时器触发等)。
DMA_Handle
- 类型:
DMA_HandleTypeDef *
- 描述:指向 DMA(直接存储器访问)句柄的指针。如果使用 DMA 进行 ADC 数据传输,这个字段指向一个
DMA_HandleTypeDef
结构,用于管理 DMA 的配置。
State
- 类型:
__IO uint32_t *
- 描述:指向 ADC 状态的指针。这个字段通常用于存储 ADC 的当前状态,如转换进行中、转换完成等状态信息。
ErrorCode
- 类型:
__IO uint32_t
- 描述:存储 ADC 操作过程中发生的错误代码。这可以帮助调试和排查问题,比如发生了什么错误,是否由于配置问题导致操作失败等。
1.4 启用了几个ADC就定义几个stm32_adc_obj[]元素
1.5 ADC_Handler和adc_config是一个类型的变量
1.6 for循环
用sizeof判断使用了几个ADC,使用了几个ADC就循环几此
1.把adc_config赋值给ADC_Hander(因为第6小点)
2.通过stm32f407xx.h判断是否有这个外设
3.Instance中存放的名字是ADCx,是ADC几就把几赋值给name_buf[3]
1.7 HAL_ADC_Init()
1.传入ADC_HandleTypeDef类型的值,初始化ADC
2.如果返回错误,答应init failed
1.8 rt_hw_adc_register()
用于注册硬件 ADC 的函数,它将 ADC 驱动和硬件抽象层(HAL)关联起来,使得 RT-Thread 可以识别和使用指定的 ADC 外设
- 初始化硬件 ADC 驱动:这个函数将硬件 ADC 外设与 RT-Thread 的设备模型进行注册,使得 RT-Thread 可以管理和访问硬件 ADC。
- 设备注册:它会在 RT-Thread 的设备模型中创建一个 ADC 设备对象,从而让系统能够通过统一的接口(例如
read()
、write()
等)来操作硬件。 - 设备抽象层支持:通过设备抽象层,用户可以通过设备操作接口(如打开设备、关闭设备、读取数据等)与硬件 ADC 进行交互。
1.9rt_adc_device
是用于表示一个 ADC 设备 的结构体
1.10 struct rt_adc_ops
RT-Thread 中与 ADC(模拟到数字转换器) 设备交互的操作函数结构体,它包含了一组函数指针
二、查找ADC设备rt_device_find()
1 |
|
三、使能ADC通道rt_adc_enable()
3.1 stm32_adc_enabled
rt_adc_enable()中调用了硬件驱动层函数stm32_adc_enabled()
- 传入device和enabled参数,此处的channel没用到
四、读取通道值rt_adc_read()
获取ADC通道的值,存入value变量中
4.1 stm32_get_adc_value()
rt_adc_read()中调用了硬件驱动层函数1stm32_get_adc_value()
4.2 stm32_adc_get_channel()
将通道的数字转换成ADC通道的地址
五、 关闭ADC通道rt_adc_disable()
5.1 stm32_adc_enabled()
rt_adc_disable()中调用了硬件驱动层函数stm32_adc_enabled()
六、总结
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The personal blog of DWen_666!