今天继续我们的STM32的内容学习,我使用的单片机是STM32F103VCT6,通过Keil Array Visualization软件来观测AD采样出来的波形。先来看看本次实验用到的硬件知识。
首先是ADC(Analog-to-Digital Converter)是模拟信号转数字信号的关键组件,用于将来自外部传感器或模拟输入的模拟信号转换为数字形式,以便微处理器或控制器进行数字信号处理。如果大家看我其他文章的话,这个器件就是我们采样需要用到的一个器件。它的功能框图如下。
首先,需要注意的是电压的范围,这也是ADC输入信号的幅值范围[,
],这里我用的电压范围是[0,3]。这样就够了。当然好像也有负的。这里就不做讨论了。其次,就是输入通道,也就是你的采样信号加在哪个地方。每个ADC最多有16个通道。ADC1和ADC2都有16个通道。接下来,这张图就是ADC对应通道的IO口。大家可以参考一下。这个只是STM32F103VET6的ADC的IO分配,具体到单片机大家可以去找参考手册。

对应的GPIO口要配置成模拟输入模式,即GPIO_Mode_AIN。我使用的是ADC1的4通道,由上图可知,也就是PA4的端口。代码如下。
void GPIO_Configuration(void)
{
/* 定义 GPIO 初始化结构体 GPIO_InitStructure */
GPIO_InitTypeDef GPIO_InitStructure;
/* 将 PA.4 设置为模拟输入脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
接下来就是配置ADC了。这里要根据下面的结构体,慢慢配置。包括工作模式,ADC扫描(单通道还是多通道),转换模式的选择,触发方式的选择,对齐格式的选择(左对齐,右对齐等)、ADC采集通道数。当然我建议大家复制粘贴,毕竟结构体打起来太麻烦了,咱们主要学的是原理。结构体如下。
typedef struct
{
uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or
dual mode.
This parameter can be a value of @ref ADC_mode */
FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion is performed in
Scan (multichannels) or Single (one channel) mode.
This parameter can be set to ENABLE or DISABLE */
FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in
Continuous or Single mode.
This parameter can be set to ENABLE or DISABLE. */
uint32_t ADC_ExternalTrigConv; /*!< Defines the external trigger used to start the analog
to digital conversion of regular channels. This parameter
can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */
uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment is left or right.
This parameter can be a value of @ref ADC_data_align */
uint8_t ADC_NbrOfChannel; /*!< Specifies the number of ADC channels that will be converted
usi
1003




被折叠的 条评论
为什么被折叠?



