STM32的ADC(看门狗)(免费)
STM32单片机的模拟看门狗的库函数设置
STM32单片机的模拟看门狗的库函数设置ADC的模拟看门狗用于检查电压是否越界。
他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。
库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单。
当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。
捕获这个中断,可以做出一些应对措施。
数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。
看门狗比较是在数据对齐之前完成的。
先进行看门狗比较,再将数据放入ADC_DR数据寄存器。
在ST的库中,只有简单的三个与看门狗相关的函数:void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); 使用ADC_AnalogWatchdogThresholdsConfig设置触发看门狗的上下限使用ADC_AnalogWatchdogSingleChannelConfig配置要使用模拟看门狗的通道配置完成后使用ADC_AnalogWatchdogCmd启动模拟看门狗。
我写的函数很简单,就这么三行。
将模拟看门狗加在ADC1的CH1上。
代码如下:voidADC_WatchdogConfig(void){ ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Chan nel_0); ADC_AnalogWatchdogThresholdsConfig(ADC1,1500,0xFFF); ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);}NVIC中初始化模拟看门狗:void NVIC_Config(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;。
STM32之ADC(内部基准电压,参考电压)
STM32之ADC(内部基准电压,参考电压)
转 STM32内部参照电压VREFIN的使⽤ https:///uncle_guo/article/details/50625660
每个STM32芯⽚都有⼀个内部的参照电压,相当于⼀个标准电压测量点,在芯⽚内部连接到ADC1的通道17。
根据数据⼿册中的数据,这个参照电压的典型值是1.20V,最⼩值是1.16V,最⼤值是1.24V。
这个电压基本不随外部供电电压的变化⽽变化。
不少⼈把这个参照电压与ADC的参考电压混淆。
ADC的参考电压都是通过Vref+提供的。
100脚以上的型号,Vref+引到了⽚外,引脚名称为Vref+;64脚和⼩于64脚的型号,Vref+在芯⽚内部与VCC信号线相连,没有引到⽚外,这样AD的参考电压就是VCC上的电压。
在ADC的外部参考电压波动,或因为Vref+在芯⽚内部与VCC相连⽽VCC变化的情况下,如果对于ADC测量的准确性要求不⾼时,可以使⽤这个内部参照电压得到ADC测量的电压值。
具体⽅法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:
Vchx = Vrefint * (ADchx/ADrefint)
其中Vrefint为参照电压=1.20V(STM32F107)。
如何⽤VDDA作为ADC参考电压,当测量信号电压超过这个范围可以⽤精密电阻分压或者放⼤器分压,或者选择合适的外部电压基准芯⽚。
STM32的ADC设置步骤
STM32的ADC设置步骤STM32的ADC(Analog-to-Digital Converter)是一种用于将模拟信号转换为数字信号的外设。
在使用STM32的ADC之前,需要进行一系列的设置和配置。
以下是STM32的ADC设置步骤的详细说明:1.硬件连接:首先,将模拟信号连接到STM32的ADC引脚。
具体连接方式取决于所使用的STM32系列和芯片型号,可以参考芯片的数据手册。
2.时钟设置:ADC外设的时钟源需要配置和使能。
首先,选择一个适合的时钟源,通常使用主时钟源或外部时钟源。
然后,配置ADC时钟分频器,以确保时钟频率适合ADC的要求。
最后,使能ADC时钟。
3.ADC基本设置:完成时钟设置后,可以开始进行ADC的基本配置,包括设置ADC模式、采样时间、分辨率等。
-ADC模式:选择一种适合应用场景的ADC模式,常见的有单次转换模式和连续转换模式,前者适用于一次性转换,后者适用于连续转换。
-采样时间:根据输入信号的特性和采样速率,选择合适的采样时间。
采样时间越长,精度越高,但转换速度会降低。
-分辨率:设定ADC的分辨率,一般有8位、10位、12位等选项。
分辨率越高,转换精度越高,但转换时间会增加。
4.通道选择:在开始进行转换之前,需要选择要转换的ADC通道。
STM32的不同型号有不同的ADC通道数量和配置,可以通过相关寄存器设置选择。
参考芯片的数据手册,确定要使用的ADC通道。
5.触发源设置:可以通过外部触发源或软件触发来启动ADC转换。
外部触发源通常为其他硬件中断或定时器,配置相关的寄存器使能外部或软件触发转换。
6.DMA设置:如果需要使用DMA(Direct Memory Access)来传输ADC转换结果,需要进行DMA的相关设置。
首先,使能DMA。
然后配置DMA通道和传输方向。
最后,启动DMA传输。
7.中断设置:8.校准:在进行转换之前,需要进行ADC的校准。
校准过程会自动由硬件完成,可以通过设定寄存器使能自动校准。
STM32多通道ADC采集详解(DMA模式和非DMA模式)
STM32多通道ADC采集详解(DMA模式和非DMA模式)在非DMA模式下,ADC采集的数据是通过CPU直接读取的,采集效率相对较低,但是编程相对简单。
首先,需要初始化ADC模块的工作模式(单通道、多通道等)和采样时间。
然后,使能ADC模块,并配置所需的通道和采样时间。
接着,设置采样序列,指定要采集的通道和相应的排列顺序。
在采集数据时,首先需要设置ADC转换模式和采样时间,然后开始转换,并等待转换完成。
转换完成后,通过读取ADC_DR寄存器可以获取转换结果。
如果需要采集多个通道的数据,可以通过设置ADCSQR中的SQx位来启动下一次转换。
在DMA模式下,ADC采集的数据是通过DMA控制器传输到指定的内存区域,采集效率较高,适合数据量较大的应用场景。
与非DMA模式相比,DMA模式下的配置需要额外设置DMA控制器的工作模式(单次传输、循环传输等)和传输数据的目的地地址。
在采集数据前,需要设置DMA传输的目的地地址,并使能DMA传输。
在开启ADC转换后,DMA控制器会根据设置的目的地地址来自动传输数据,无需CPU干预。
采集完成后,CPU可以通过检查DMA传输完成标志位来判断数据是否已传输完毕。
总结:
使用非DMA模式的ADC采集相对简单而容易上手,适用于数据量较小且对实时性要求不高的应用场景。
DMA模式下的ADC采集效率更高,适用于数据量较大且对实时性要求较高的应用场景。
无论是DMA模式还是非DMA模式,都需要根据具体的应用需求来选择合适的模式。
在使用DMA模式时,还需要注意合理设置DMA传输的目的地地址和传输模式,以充分发挥DMA的优势。
STM32独立看门狗和低功耗模式_RTC定时唤醒来喂狗
STM32独立看门狗和低功耗模式_RTC定时唤醒来喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。
其中独立看门狗的时钟由独立的RC振荡器(STM32F10x 一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。
而且独立看门狗一旦启动,除了系统复位,它不能再被停止。
但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。
那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用?
一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。
比如看门狗复位的时间间隔为10s。
那么在进入休眠模式前设置RTC闹钟中断时间为5s。
这样每隔5s唤醒一次喂一次狗。
便可以很好的解决这个问题。
while(1)
{
// 执行任务
Task1();
Task2();
// ..
// 喂狗
dev_iwdg_feed();
// 进入待机模式开关
if(m_bEnterStandByMode)
{
// 使能外部中断,GPIOB3,用以MCU从待机模式唤醒
dev_exTI_enable(TRUE);
ENTERSTOPMODE:
// 设置RTC闹钟,5秒钟产生一次RTC闹钟中断*/
dev_rtc_setAlarm(5);。
STM32单片机的ADC多通道采样
如果设计电路图的话,可以参考这种思路。
我的收获
1引脚初始化的时候需要注意
每一个ADC通道都对应一个GPIO引脚,看图中的ADC123_IN10,表示
这个引脚(PC0)可以配置为ADC1的通道10,或者是ADC2的通道10,或
者是ADC3的通道10,这个地方非常重要,涉及到后面ADC初始化时函数
STM32单片机的ADC多通道采样
一单通道采样
参考资料:
《STM32库开发实战指南》
原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来
看硬件电路图
这里使用的是3362电位器(10K),即用STM32来测量PB0和GND两
端的电压,这样的电路设计比较简单也容易理解,但是存在一定的弊端,下
的调用。
比如当我们使能ADC时,我们调用的函数是
ADC_Cmd();1
如果我们使用的是ADC1,那幺上面函数的写法就应该是
ADC_Cmd(ADC1,ENABLE);1
相应的如果是ADC2,那幺上面函数的写法就是
ADC_Cmd(ADC2,ENABLE);1
另外需要注意的是,我们这里的ADC使用了DMA,所以如果你使用的
是ADC1,那幺对应DMA就应该是DMA1的通道1
如果使用的是ADC2或者是ADC3就需要自己去查找手册,看看对应的
是哪个DMA的那个通道。
在后面上传的程序中可以看到DMA初始化的时候有这幺一条语句
DMA_Init(DMA1_Channel1);1
这就是初始化DMA1的通道1
相应的
DMA_Cmd(DMA1_Channel1,ENABLE);1
就是使能DMA1的通道1
stm32相关笔记——ADC部分
stm32相关笔记——ADC部分我们在学习⼀门技术的时候,应该对它的理论部分有所了解,然后才能在实践中进⼀步加深理解,进⽽掌握。
对于stm32来说,我认为学习的时候应该先仔细阅读相关的参考⼿册,然后再动⼿实践,这样才能理解得更加透彻,掌握得更加牢固!今天记录⼀下我学习stm32的ADC部分的了解。
1.介绍⼩结:stm32的ADC有18个通道(16个外部通道+2个内部通道),有单次、连续、扫描和间断四种模式,ADC的结果可以左对齐和右对齐的⽅式存储在16位的数据寄存器中(⼀般我们都是使⽤右对齐的⽅式)2、特征3、框图框图应该是最重要的部分了,理解了框图,对这个外设的理解就⽐较透彻了。
①模拟⾄数字转换器中有两个通道,⼀个是注⼊通道,⼀个是规则通道,对应的转换结果也是存储到注⼊通道数据寄存器和规则通道数据寄存器中(都是16位的);②注⼊通道数据寄存器有4个,规则通道数据寄存器只有1个,规则通道最多可以转化16个通道的数据,⽽结果都是存储在⼀个规则通道数据寄存器中,为了避免数据丢失,可以采⽤DMA搬运数据,提⾼效率。
③触发注⼊通道开始转化的外部触发信号有8种,如图所⽰,其中TIM8_CH4及其重映射只存在于⼤容量的产品中。
④类似于注⼊通道,触发规则通道的外部触发信号也有8种,如图所⽰,其中TIM8_TRGO及其重映射也只存在于⼤容量产品中。
⑤以上的两点只针对ADC1和ADC2,ADC3的触发信号有所不同,如图所⽰:⑥转换的过程如图,ADCx_IN0~ADCx_IN15共16个外部通道,通过GPIO端⼝将模拟量传达到模拟⾄数字转化器中的注⼊通道或者规则通道,另外还有两个内部通道温度传感器和V REFINT,同样也可以将模拟量传送到模拟⾄数字转化器中的注⼊通道或者规则通道,注⼊通道最多可以转换4个通道的模拟量,转换结果存储到注⼊通道数据寄存器中,转换完成后会产⽣JEOC标志位,规则通道最多可以转换16个通道,转换结果存储到规则通道数据寄存器中,转换完成后会产⽣EOC标志位。
STM32之ADC配置
STM32之ADC配置对于STM32,在使用ADC的时候需要配置几个参数。
(1) 第一个参数是ADC_Mode,这里设置为独立模式:ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;在这个模式下,双ADC不能同步,每个ADC接口独立工作。
所以如果不需要ADC同步或者只是用了一个ADC的时候,就应该设成独立模式了。
(2) 第二个参数是ADC_ScanConvMode,这里设置为DISABLE。
ADC_InitStructure.ADC_ScanConvMode = DISABLE;如果只是用了一个通道的话,DISABLE就可以了,如果使用了多个通道的话,则必须将其设置为ENABLE。
(3) 第三个参数是ADC_ContinuousConvMode,这里设置为ENABLE,即连续转换。
如果设置为DISABLE,则是单次转换。
两者的区别在于连续转换直到所有的数据转换完成后才停止转换,而单次转换则只转换一次数据就停止,要再次触发转换才可以。
所以如果需要一次性采集1024个数据或者更多,则采用连续转换。
(4) 第四个参数是ADC_ExternalTrigConv,即选择外部触发模式。
这里只讲三种:1、第一种是最简单的软件触发,参数为ADC_ExternalTrigConv_None。
设置好后还要记得调用库函数:ADC_SoftwareStartConvCmd(ADC1, ENABLE);这样触发才会启动。
2、第二种是定时器通道输出触发。
共有这几种:ADC_ExternalTrigConv_T1_CC1、ADC_ExternalTrigConv_T1_CC2、ADC_ExternalTrigConv_T2_CC2、ADC_ExternalTrigConv_T3_T以及ADC_ExternalTrigConv_T4_CC4。
定时器输出触发比较麻烦,还需要设置相应的定时器。
一文读懂STM32f030c8t6单片机ADC模拟看门狗的使用
一文读懂STM32f030c8t6单片机ADC模拟看门狗的使用
STM32f030c8t6单片机ADC模拟看门狗使用
根据st官方手册提供描述不难看出,ADC模拟看门狗其实就是用户可以设置一个AD值上下限值,然后打开此模拟看门狗中断开关,那么就会在检测到当IO输入转换AD值小于下限值或大于上限值时进入相应的中断函数。
大致就是这么一个功能实现过程。
根据表63可以看出,模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测。
那么明白了以上这些基础规则,那么我就要根据官方提供的库文件及里面的使用说明来配置相应函数来使用模拟看门狗。
打开此文件后下一步:
看!在这个官方提供的.c文件里面已经有介绍关于模拟看门狗使用的详细介绍的,只要理解了英文描述的意义,结合之前看数据手册关于ADC模拟看门狗的描述就会很快的完成模拟看门狗的配置程序。
下面即是完成的模拟看门狗配置函数:
最后还不要忘记加入打开看门狗中断的函数:
ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);
完整的配置过程如下:
voidNVIC_Config(void)
{
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority=3;//先占优先级1级。
STM32的ADC简介_DMA方式的程序设计与实现
STM32的ADC简介_DMA方式的程序设计与实现ADC简介:ADC(Analog-to-Digital Converter,模/ 数转换器)。
也就是将模拟信号转换为数字信号进行处理,在存储或传输时,模数转换器几乎必不可少。
STM32在片上集成的ADC外设非常强大,我使用的奋斗开发板是STM32F103VET6,属于增强型的CPU,它有18个通道,可测量16个外部和2个内部信号源。
各通道的A/D转换可以单次,连续,扫描或间断模式执行,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
我们以ADC规则通道转换过程来分析,如上图,所有的器件都是围绕中间的模拟至数字转换器部分展开的。
它的左端VREF+,VREF- 等ADC参考电压,ADCx_IN0 ~ADCx_IN15为ADC的输入信号通道,即某些GPIO引脚。
输入信号经过这些通道被送到ADC器件,ADC器件需要收到触发信号才开始进行转换,如EXTI外部触发,定时器触发,也可以使用软件触发。
ADC部件接受到触发信号后,在ADCCLK时钟的驱动下对输入通道的信号进行采样,并进行模数转换,其中ADCCLK是来自ADC预分频器。
ADC部件转换后的数值被保存到一个16位的规则通道数据寄存器(或注入通道数据寄存器)中,我们可以通过CPU指令或DMA把它读到内存(变量),模数转换之后,可以出发DMA请求或者触发ADC转换结束事件,如果配置了模拟看门狗,并且采集的电压大于阈值,会触发看门狗中断。
其实对于ADC采样,软件编程主要就是ADC的配置,当然我是基于DMA方式的,所以DMA的配置也是关键!话不多说看代码!主函数:main.c#include printf.h#include adc.h#include stm32f10x.hextern __IO uint16_t ADC_ConvertedValue;float ADC_ConvertedValueLocal;void Delay(__IO uint32_t nCount)。
【6-06】Stm32寄存器--ADC and DAC
4位(STRT--Regular channel Start flag):规则通道开始(硬件在开始转换时置位,软件清0)。定义:0(规则通道未开始转换),1(规则通道已开始转换) 3位(JSTRT--Injected channel Start flag):注入通道开始(硬件在开始转换时置位,软件清0)。定义:0(规则通道未开始转换),1(规则通道已开始转换) 2位(JEOC--Injected channel End of Conversion):注入通道转换结束(硬件在所有注入通道转换结束时设置,由软件清0)。 定义:0(转换未完成),1(转换完成) 1位(EOC--End of Conversion):转换结束。(该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除。 定义:0(转换未完成),1(转换完成) 0位(AWD--Analog watchdog flag):模拟看门狗标志,该位在硬件转换的电压值超出了ADC_LTR和ADC_HTR寄存器定义的范围时置位,由软件清0。 定义:0(没事件),1(有事件)
23位(TSVREFE--Temperature Sensor and V REFINT Enable): 温度传感器和V refint使能(手动)。在多余1个ADC的器件中该位仅出现在ADC1中。 定义:0(禁止),1(开启)。【注】Vrefint :Internal Reference Voltage = 内部参考电压。 22位(SWSTART--SoftWare Start conversion of regular channels): 开始转换规则通道。(软件启动该位,转换后硬件马上清除此位) 如果在EXTSEL[2:0]位中选择了SWSTART为触发事件,该位用于启动一组规则通道的转换。定义:0(复位状态),1(开始转换规则通道)
stm32f334标准库配置adc
stm32f334标准库配置adc要在STM32F334微控制器上配置ADC(模数转换器),您需要遵循以下步骤:1. 首先,确保您已经安装了STM32CubeMX软件,该软件可以帮助您生成用于配置微控制器外设的初始化代码。
2. 打开STM32CubeMX并创建一个新的工程。
选择您所使用的适当的微控制器型号。
3. 在"Pinout & Configuration"选项卡中,选择ADC通道的引脚。
您可以通过将鼠标悬停在GPIO引脚上来选择其功能,并选择ADC功能。
4. 选择ADC的时钟源。
在"Configuration"选项卡的"Analog Watchdog"部分,选择适当的时钟源。
5. 在"Configuration"选项卡的"ADC"部分,配置ADC的参数。
您可以选择触发模式(软件触发或外部触发),采样时间,数据对齐方式和分辨率等。
6. 在顶部菜单栏中,点击"Project"并选择"Generate Code"以生成初始化代码。
7. 导出生成的代码并将其添加到您的项目中。
8. 初始化ADC并开始转换。
您可以使用生成的代码中的函数来启动ADC转换,并使用相关的API来读取转换结果。
这些是配置STM32F334上ADC的基本步骤。
请注意,与其他外设一样,您还可以配置中断和DMA等功能来提高ADC 的性能和灵活性。
有关具体的配置细节和代码示例,您可以参考ST官方提供的相关文档和示例代码。
奋斗STM32V3版ADC例程
奋斗版 STM32 开发板例程详解———ADC 采集例程ADC 采集例程实验平台:奋斗版STM32开发板MINI、V2、V2.1、V3 实验内容:板子加电后,通过串口1显示ADC1的通道11的测量结果,该实验学习了 基于DMA专递方式的ADC采集软件的编制及控制流程。
预先需要掌握的知识1ADC介绍12位ADC是一种逐次逼近型模拟数字转换器。
它有18个通道,可测量16个外部和2个内部 信号源。
各通道的A/D转换可以单次、连续、扫描或间断模式执行。
ADC的结果可以左对齐或 右对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值值。
2● ● ● ● ● ● ● ● ● ● ●ADC主要特征12-位分辨率 转换结束,注入转换结束和发生模拟看门狗事件时产生中断 单次和连续转换模式 从通道0到通道n的自动扫描模式 自校准 带内嵌数据一致的数据对齐 通道之间采样间隔可编程 规则转换和注入转换均有外部触发选项 间断模式 双重模式(带2个或以上ADC的器件) ADC转换时间: ─ STM32F103xx增强型产品:ADC时钟为56MHz时为1µs(ADC时钟为72MHz为1.17µs) ─ STM32F101xx基本型产品:ADC时钟为28MHz时为1µs(ADC时钟为36MHz为1.55µs) ─ STM32F102xxUSB型产品:ADC时钟为48MHz时为1.2µs ● ADC供电要求:2.4V到3.6V ● ADC输入范围:VREF- ≤ VIN ≤ VREF+ ● 规则通道转换期间有DMA请求产生。
3 ADC功能描述 3.1 ADC开关控制通过设置ADC_CR1寄存器的ADON位可给ADC上电。
当第一次设置ADON位时, 它将ADC 从断电状态下唤醒。
ADC上电延迟一段时间后,再次设置ADON位时开始进行转换。
STM32单片机ADC的模拟看门狗的测试
STM32单片机ADC的模拟看门狗的测试ADC的模拟看门狗用于检查电压是否越界。
他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。
库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单。
当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。
捕获这个中断,可以做出一些应对措施。
数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。
看门狗比较是在数据对齐之前完成的。
先进行看门狗比较,再将数据放入ADC_DR数据寄存器。
在ST的库中,只有简单的三个与看门狗相关的函数:void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx,uint32_t ADC_AnalogWatchdog); void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx,uint16_t HighThreshold,uint16_t LowThreshold);void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx,uint8_t ADC_Channel);使用ADC_AnalogWatchdogThresholdsConfig设置触发看门狗的上下限使用ADC_AnalogWatchdogSingleChannelConfig配置要使用模拟看门狗的通道配置完成后使用ADC_AnalogWatchdogCmd启动模拟看门狗。
我写的函数很简单,就这么三行。
将模拟看门狗加在ADC1的CH1上。
代码如下:void ADC_WatchdogConfig(void){ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Channel_0);ADC_AnalogWatchdogThresholdsConfig(ADC1,1500,0xFFF);ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);。
STM32单片机的ADC配置详解
STM32单片机的ADC配置详解一、ADC定义将模拟量转换为数字量的过程称为模式(A/D)转换,完成这一转换的工具就是模数转换器(简称ADC),用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。
例如:把芯片的引脚上的电压读出来,把芯片集成的上的温度传感器的温度读出来!二、ADC要点1-独立模式-单通道-中断读取①、初始化ADC用到的GPIO;②、设置ADC的工作参数并初始化;③、配置ADC时钟;④、设置ADC转换通道顺序及采样时间;⑤、配置使能ADC转换完成中断,在中断内读取转换完的数据;⑥、使能ADC;⑦使能软件触发ADC转换。
三、ADC内容1)ADC数量:STM32有3个ADC,每个ADC最多有16个外部通道,ADC1和ADC2都有16个外部通道,而ADC3随CPU引脚的不同通道数也不同,一般都有8个外部通道。
2)ADC精度:ADC为12位,即模拟电压经过ADC转换后是一个12位的数字量;一般情况下ADC的输入电压范围是:0~3.3V,因此最小精度为:3.3/2^12,当数字量为X时,则有模拟量Y = (3.3 / 2^12)*X。
3)电压输入范围:ADC 输入范围为:VREF- ≤VIN ≤VREF+。
由VREF- 、VREF+ 、VDDA 、VSSA 、这四个外部引脚决定。
一般把VSSA 和VREF- 接地,把VREF+ 和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。
4)输入通道:ADC的信号输入就是通过通道来实现的,信号通过通道输入到单片机中,单片机经过转换后,将模拟信号输出为数字信号;STM32F103的ADC多达18个通道,在F103ZET6中ADC1的通道16连接到了芯片内部的温度传感器,Vrefint (内部参照电压)连接到了通道17,ADC2 的模拟通道16 和17 连接到了内部的VSS(地)。
外部的16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4 路。
adc
ADC_DeInit(ADC1); //复位ADC1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:STM32有多种工作模式,而不同的ADC又是共用通道,当两个ADC采集 同一个通道的先后顺序和时间间隔不同,就有不同的方式。具体的各个方式可在手册中查 询。 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模 数转换工作在单通道模式。当多通道需要ADC采集时,可把ADC配置为按一定顺序对各个 通道进行扫描转换,即进行轮流采集各通道的值。若采集多个通道,则必须开启此模式。 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式。可设置为连续和单次。 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐(ADC的转换精度为12位,而ADC的数据 存储器-ADC_DR为16位,所以就有了左对齐和右对齐) ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则 转换的ADC通道的数目(1-16) ADC_Init(ADC1, &ADC_InitStructure); //根据 ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
https://stackedit.io/viewer#
stm32模拟数字转换ADC
12位精度下转换速度可高达1MHz 可配置的转换精度:6位,8位,10位,12位 转换电压范围:0 ~ 3.6V,VSSA ~ VDDA 供电范围:2.4V ~ 3.6V 19个转换通道
16个外部通道 3个内部通道
温度传感器 内部电压参考 电池供电监测
8
ADC通道转换时间
每个通道总的转换时间 = TSampling + Tconversion TSampling可配置:SMP[2:0]@ADC_SMPR
需要和外部电路的输入阻抗匹配 采样时间适用于所有通道,不再支持通道之间不同的采样时间 采样阶段结束,硬件置位EOSMP@ADC_ISR,并条件性地产生中断
ADC模块就绪 转换结束 转换序列结束 采样阶段结束 模拟看门狗报警 溢出错误
2
功能框图
VDDA VSSA
AUTOFF
ADC_IN0
. . . . . . . . .
ADEN/ADDIS
DMA Request
GPIO Ports
ANALOG MUX
Address/data bus
4
时钟的选择
ADC时钟源 优点
以保证最高的ADC工作频率
缺点
触发事件和转换的起始时刻 之间的延迟不确定
无论MCU的运行频率,都可 触发信号的同步会带来抖动 专用的片上 可以使用自动节电模式( 14MHz RC振 自动开启或关闭14MHz的内 荡器 部振荡器)
不会有时钟域之间的同步
ADC_IN15 Temp Sensor VREFINT VBat
Sample and hold
SAR ADC
Start
Data register (12bits)
STM32F103系列单片机最实用看门狗的详细资料概述
STM32F103系列单片机最实用看门狗的详细资料概述为什么使用看门狗事情很简单先前做的一款采集数据的产品不知道为何异常,陷入死循环然后“死机”,分析了很多次,没发现原因,但是每次重新上点后就能正常采集到数据。
后来找到了解决方法:看门狗!目的是当程序走入死循环或者硬件异常时,可以自动复位,这样就可以得到跟重新上电后差不多的效果了。
使用的平台:stm32f103系列单片机使用的烧写调试模式:Jlink SWD 模式。
使用STM32官方模板库。
ST系列单片机看门狗分为两种:1.独立看门狗,2.窗口看门狗。
独立看门狗:可参看RM(reference Manual)的Independent watchdog (IWDG)当然,只是简要查看下RM中的介绍(至于寄存器的操作,我们可以略过,因为我们使用库的开发,但是基本流程一定要了解!)。
在这里我们要抓住几个关键点:a、stm32f10x系列有两个看门狗,看门狗主要用于检测由于软件出错的问题,并触发系统自动复位,或者触发一个中断(窗口看门狗才有)。
b、独立看门狗的时钟源为LSI,尽管主时钟出错,它还是能保持激活状态。
窗口看门狗的时钟源为APB1时钟,并且可以修改分频值。
c、独立看门狗:有独立时钟(内部低速时钟LSI),所以不受系统硬件影响的系统故障探测器。
主要用于监视硬件错误。
精确度要求比较低。
d、窗口看门狗:时钟与系统相同。
如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。
精确度要求更高。
看门狗原理简介:有某个寄存器按照时钟源不断的递减(有只狗,不断的消耗能量),当该。
STM32的ADC设置步骤
STM32的ADC设置步骤STM32是一款设计非常巧妙的控制芯片,其中ADC是非常实用的模块,它和我们之前学习过的51、430单片机中的ADC有相同的原理,但是STM32相对来说略有复杂,对于初学者来说,要想快速搞定这个模块首先一定要了解硬件结构,其次了解寄存器位的功能,熟悉ADC设置流程是最主要核心。
1)开启PA口时钟,设置PA0为模拟输入。
STM32F103RBT6的ADC通道0在PA0上,所以,我们先要使能PORTA的时钟,然后设置PA0为模拟输入。
2)使能ADC1时钟,并设置分频因子。
要使用ADC1,第一步就是要使能ADC1的时钟,在使能完时钟之后,进行一次ADC1的复位。
接着我们就可以通过RCC_CFGR设置ADC1的分频因子。
分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。
3)设置ADC1的工作模式。
在设置完分频因子之后,我们就可以开始ADC1的模式配置了,设置单次转换模式、触发方式选择、数据对齐方式等都在这一步实现。
4)设置ADC1规则序列的相关信息。
接下来我们要设置规则序列的相关信息,我们这里只有一个通道,并且是单次转换的,所以设置规则序列中通道数为1,然后设置通道0的采样周期。
5)开启AD转换器,并校准。
在设置完了以上信息后,我们就开启AD转换器,执行复位校准和AD校准,注意这两步是必须的!不校准将导致结果很不准确。
6)读取ADC值。
在上面的校准完成之后,ADC就算准备好了。
接下来我们要做的就是设置规则序列0里面的通道,然后启动ADC转换。
在转换结束后,读取ADC1_DR里面的值就是了。
通过以上几个步骤的设置,我们就可以正常的使用STM32的ADC1来执行AD转换操作了。
感谢您的阅读,祝您生活愉快。
STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)
STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。
看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。
看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。
看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
具体的实现步骤:开启看门狗,设置减计数的初始值,当计数值达到超时值时,产生MCU 复位,此时本来运行的程序终止重新启动单片机(发生了故障)。
在使用了看门狗之后,在正常运行的程序中加入喂狗的程序,即采用定时器的方式每隔一段时间进行一次喂狗重置计数装载值,这样,只要程序正常运行,没有出现故障或软件错误,就会不断的定时喂狗,从而不会使计数值达到超时值产生复位。
一、独立看门狗IWDG:1、IWDG主要性能1)自由运行的递减计数器2)时钟由独立的RC振荡器提供(可在停止和待机模式下工作)3)看门狗被激活后,则在计数器计数至0x000时产生复位2、IWDG功能描述在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。
当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要键寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。
void IWDG_ConfiguraTIon(void)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
00058 system_stm32f10x.c file
00059 */
00060
00088 ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_14);
00089 /* Enable analog watchdog on one regular channel */
00090 ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleRegEnable);
00074 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
00075 ADC_InitStructure.ADC_ScanConvMode = DISABLE;
00076 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
00046
00047 /**
00048 * @brief Main program
00049 * @param None
00050 * @retval None
00051 */
00052 int main(void)
00053 {
00054 /*!< At this stage the microcontroller clock setting is already configured,
00061 /* System clocks configuration ---------------------------------------------*/
00062 RCC_Configuration();
00063
00064 /* NVIC configuration ------------------------------------------------------*/
00009 * @attention
00010 *
00011 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
00012 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
00013 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
00014 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
00017 *
00018 * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
00019 ******************************************************************************
00097
00098 /* Enable ADC1 reset calibration register */
00099 ADC_ResetCalibration(ADC1);
00100 /* Check the end of ADC1 reset calibration reห้องสมุดไป่ตู้ister */
00077 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
00078 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
00079 ADC_InitStructure.ADC_NbrOfChannel = 1;
00038 ADC_InitTypeDef ADC_InitStructure;
00039
00040 /* Private function prototypes -----------------------------------------------*/
00041 void RCC_Configuration(void);
00025
00026 /** @addtogroup STM32F10x_StdPeriph_Examples
00027 * @{
00028 */
00029
00030 /** @addtogroup ADC_AnalogWatchdog
00031 * @{
00032 */
00091
00092 /* Enable AWD interrupt */
00093 ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE);
00094
00095 /* Enable ADC1 */
00096 ADC_Cmd(ADC1, ENABLE);
00042 void GPIO_Configuration(void);
00043 void NVIC_Configuration(void);
00044
00045 /* Private functions ---------------------------------------------------------*/
00080 ADC_Init(ADC1, &ADC_InitStructure);
00081
00082 /* ADC1 regular channel14 configuration */
00083 ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);
00055 this is done through SystemInit() function which is called from startup
00056 file (startup_stm32f10x_xx.s) before to branch to application main.
00084
00085 /* Configure high and low analog watchdog thresholds */
00086 ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0B00, 0x0300);
00087 /* Configure channel14 as the single analog watchdog guarded channel */
00065 NVIC_Configuration();
00066
00067 /* GPIO configuration ------------------------------------------------------*/
00068 GPIO_Configuration();
00069
00070 /* Configure LED GPIO Pin ------------------------------------------------- */
00071 STM_EVAL_LEDInit(LED1);
00072
00073 /* ADC1 Configuration ------------------------------------------------------*/
00036 /* Private macro -------------------------------------------------------------*/
00037 /* Private variables ---------------------------------------------------------*/
00101 while(ADC_GetResetCalibrationStatus(ADC1));
00102
00103 /* Start ADC1 calibration */
00104 ADC_StartCalibration(ADC1);
00105 /* Check the end of ADC1 calibration */
00106 while(ADC_GetCalibrationStatus(ADC1));
00107
00108 /* Start ADC1 Software Conversion */
00109 ADC_SoftwareStartConvCmd(ADC1, ENABLE);
00110
00005 * @version V3.5.0
00006 * @date 08-April-2011
00007 * @brief Main program body
00008 ******************************************************************************
00111 while (1)