首页 > 其他分享 >STM32ADC单通道转换

STM32ADC单通道转换

时间:2024-03-01 21:55:21浏览次数:31  
标签:初始化 转换 NVIC STM32ADC ADC2 ADC GPIO InitStructure 单通道

STM32ADC单通道转换

1. 初始化

ADC功能初始化主要分三部分,GPIO初始化、ADC模式初始化与NVIC初始化。

1.1初始化GPIO

void ADC_GPIO_Config(void)                                  // 配置ADC通道引脚
{
	GPIO_InitTypeDef GPIO_InitStructure;                    // 定义GPIO结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);    // 使能GPIOC时钟
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;               // 选择ADC通道引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;           // 设置引脚模式为模拟输入
	
	GPIO_Init(GPIOC,&GPIO_InitStructure);                   // 初始化引脚
}

1.2 初始化ADC模式

void ADC_MODE_Config(void)
{
	ADC_InitTypeDef ADC_InitStructure;                      // 定义ADC结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);     // 使能ADC2时钟
	
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;      // 设置ADC工作模式为独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;           // 设置ADC扫描模式为单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;      // 设置ADC连续转换模式为开启
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 设置ADC外部触发模式为无
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  // 设置ADC数据对齐模式为右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;                 // 设置ADC通道数为1
	ADC_Init(ADC2,&ADC_InitStructure);                      // 初始化ADC2
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div8);                       // 设置ADC时钟为PCLK2的8分频
	
	ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_55Cycles5);   // 设置ADC通道为11,采样时间为55.5周期
	
	ADC_ITConfig(ADC2,ADC_IT_EOC,ENABLE);                   // 使能ADC2中断
	
	ADC_Cmd(ADC2,ENABLE);                                   // 使能ADC2
	
	ADC_ResetCalibration(ADC2);                             // 重置ADC2校准寄存器
	while(ADC_GetResetCalibrationStatus(ADC2));             // 等待ADC2校准寄存器重置完成
	
	ADC_StartCalibration(ADC2);                             // 启动ADC2校准
	while(ADC_GetCalibrationStatus(ADC2));                  // 等待ADC2校准完成
	
	ADC_SoftwareStartConvCmd(ADC2,ENABLE);                  // 启动ADC2软件转换
}

1.3 初始化NVIC

void ADC_NVIC_Config(void)                                      // ADC2中断优先级配置
{
	NVIC_InitTypeDef NVIC_InitStructure;                        // 定义NVIC_InitTypeDef结构体变量
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);             // 设置NVIC中断分组1
	
	NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;           // 设置中断通道为ADC1_2_IRQn
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   // 设置中断优先级为1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;          // 设置中断子优先级为1
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             // 使能中断通道
	
	NVIC_Init(&NVIC_InitStructure);                             // 初始化NVIC_InitTypeDef结构体变量
}

2.中断函数编写

中断函数命名为ADC1_2_IRQHandler即可,换ADC通道的话名字也要换。

void ADC1_2_IRQHandler(void)                            // ADC2中断服务函数
{
	
	if(ADC_GetITStatus(ADC2,ADC_IT_EOC) == SET)         // 判断是否为ADC2转换完成中断
	{
		ADC_Converted = ADC_GetConversionValue(ADC2);   // 读取ADC2转换结果
	}
	ADC_ClearITPendingBit(ADC2,ADC_IT_EOC);             // 清除ADC2转换完成中断标志位
}

标签:初始化,转换,NVIC,STM32ADC,ADC2,ADC,GPIO,InitStructure,单通道
From: https://www.cnblogs.com/tqht7h/p/18048045

相关文章

  • 进制与强制转换
    进制//进制二0b十八0十六0xinti1=010;//八进制inti2=0b100;//二进制inti3=0x100;//十六进制System.out.println(i1);//8System.out.println(i2);//4......
  • python列表、集合、字典转换要点以及查找速度区别,如何在大规模数据中实现快速查找
    1.list与set的区别与优缺点:循环速度:list最适合做固定长度的遍历,而且有顺序。set是无序的,list转换为set会乱序,若用set给list去重,转化为list时须用原list的index排序:new_list.sort(key=old_list.index)。所以这种循环尽量用list查询速度:set>list,set查询的key都是ha......
  • Qt 16位和32位高低位转换
    一、16位高低位转换1quint16highAndLowConversion_16(quint16data)2{3return((data&ox00ff)<<8)|(data>>8);4} 二、32位高低位转换1quint32highAndLowConversion_32(quint32data)2{3return((data&0x0000ffff)<<......
  • 期初单据打不开(等等其他地方),只要报错:从字符串转换日期/或者时间时,转换失败。那么说明
    期初单据打不开(等等其他地方),只要报错:从字符串转换日期/或者时间时,转换失败。那么说明服务器的时间格式不正确解决方案,步骤:  1、打开注册表,修改注册表里面的时间格式,修改完后重启一下电脑1)按下Win+R快捷键,打开运行对话框。在运行对话框中输入regedit回车2)按下图设置值,设......
  • pandas df 将两列转换为字典格式
    修改df列名importpandasaspdimportjsondata={'keys':['a','b','c','d'],'values':[1,2,3,4]}columns_mapping={'keys':'keys11','values':�......
  • Rust的Display和ToString:将对象转换为字符串
    在写代码的时候,我们经常需要将对象输出到屏幕上,或者转换为字符串;在Python中,我们可以为类型定义魔法函数__str__,print和str()都会调用它;在C++中,我们可以为对象重载ostream&operator<<(ostream&os)函数,使用ostringstream、fstream和cout的时候会调用它。在Rust中该实现什么,想必大......
  • 写少一点/ARCHITECTURE/JavaScript类型转换/Logitech Options一直转圈
    《写少一点》https://www.yuque.com/beilo/simpread/1709260496568《ARCHITECTURE文件》https://www.yuque.com/beilo/simpread/1709260486335例子https://github.com/rust-lang/rust-analyzer/blob/d7c99931d05e3723d878bea5dc26766791fa4e69/docs/dev/architecture.md《Java......
  • 国产低成本DP7344 192K 双通道 24 位 DA数模转换芯片 兼容替换CS4344
    数模转换芯片是一种将模拟信号转换为数字信号的电子元器件。它能够将来自传感器、麦克风等模拟信号输入,转换为数字信号输出,以便于处理、存储和传输。其基本工作原理是利用采样器对模拟信号进行连续采样,并且将每个采样值转化为对应的数字代码。这些数字代码经过编码器进行编码,输出......
  • Rust的From和Into特征:可能是最常用的转换类特征
    说到From和Into,以及从他们中衍生出的TryFrom和TryInto,想必大家都不会陌生。它们不像Borrow、AsRef、ToOwned这些默默工作在泛型里的特征,是绝大多数Rust开发者每天都会使用到的东西。今天我们就来加深一下对这四个特征的了解吧~From和Into如果说AsRef和AsMut的功能是做“引用到引......
  • Flask转换器
    配置文件预览DEFAULT_CONVERTERS={'default':UnicodeConverter,'string':UnicodeConverter,'any':AnyConverter,'path':PathConverter,'int':......