STM32
直播中

xymbmcu

12年用户 1040经验值
擅长:可编程逻辑
私信 关注
[问答]

ADC是如何模拟看门狗中断开关的

ADC是如何模拟看门狗中断开关的?怎样去编写模拟看门狗的配置函数?

回帖(3)

王桂香

2021-9-23 14:13:43

根据st官方手册提供描述不难看出,ADC模拟看门狗其实就是用户可以设置一个AD值上下限值,然后打开此模拟看门狗中断开关,那么就会在检测到当IO输入转换AD值小于下限值或大于上限值时进入相应的中断函数。大致就是这么一个功能实现过程。

根据表63 可以看出,模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测。
那么明白了以上这些基础规则,那么我就要根据官方提供的库文件及里面的使用说明来配置相应函数来使用模拟看门狗。

打开此文件后下一步:

看!在这个官方提供的.c文件里面已经有介绍关于模拟看门狗使用的详细介绍的,只要理解了英文描述的意义,结合之前看数据手册关于ADC模拟看门狗的描述就会很快的完成模拟看门狗的配置程序。
下面即是完成的模拟看门狗配置函数:

最后还不要忘记加入打开看门狗中断的函数:
ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);
完整的配置过程如下:

void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
}
/*
模拟看门狗配置函数
单通道:7
*/
void ADC_WatchdogConfig(void)
{
ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_AnalogWatchdog_Channel_7);
ADC_AnalogWatchdogThresholdsConfig(ADC1,4050,0);
ADC_AnalogWatchdogCmd(ADC1,ENABLE);
ADC_AnalogWatchdogSingleChannelCmd(ADC1,ENABLE);
}
以上就是对ADC模拟看门狗的使用做了一个小结,当然只是用了其中一部分功能,如有纰漏,请您指出,不胜感谢。
通过此次模拟看门狗的使用,我更加明白要利用官方资源的重要性,解铃还须系铃人,这句话非常适合做技术的人,当遇见问题时,无从下手或不知怎么样下手才会效率高的解决问题时,这时就应该想到生产厂家才是解决问题的源头关键,那里有相当丰富的使用说明文档及工具资源,这样就避免了在网络上找不到自己用到的相关应用时而苦恼无助的情况,谨以此心得与读者共勉!
举报

高欢

2021-9-23 14:13:43

根据st官方手册提供描述不难看出,ADC模拟看门狗其实就是用户可以设置一个AD值上下限值,然后打开此模拟看门狗中断开关,那么就会在检测到当IO输入转换AD值小于下限值或大于上限值时进入相应的中断函数。大致就是这么一个功能实现过程。

根据表63 可以看出,模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测。
那么明白了以上这些基础规则,那么我就要根据官方提供的库文件及里面的使用说明来配置相应函数来使用模拟看门狗。

打开此文件后下一步:

看!在这个官方提供的.c文件里面已经有介绍关于模拟看门狗使用的详细介绍的,只要理解了英文描述的意义,结合之前看数据手册关于ADC模拟看门狗的描述就会很快的完成模拟看门狗的配置程序。
下面即是完成的模拟看门狗配置函数:

最后还不要忘记加入打开看门狗中断的函数:
ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);
完整的配置过程如下:

void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
}
/*
模拟看门狗配置函数
单通道:7
*/
void ADC_WatchdogConfig(void)
{
ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_AnalogWatchdog_Channel_7);
ADC_AnalogWatchdogThresholdsConfig(ADC1,4050,0);
ADC_AnalogWatchdogCmd(ADC1,ENABLE);
ADC_AnalogWatchdogSingleChannelCmd(ADC1,ENABLE);
}
以上就是对ADC模拟看门狗的使用做了一个小结,当然只是用了其中一部分功能,如有纰漏,请您指出,不胜感谢。
通过此次模拟看门狗的使用,我更加明白要利用官方资源的重要性,解铃还须系铃人,这句话非常适合做技术的人,当遇见问题时,无从下手或不知怎么样下手才会效率高的解决问题时,这时就应该想到生产厂家才是解决问题的源头关键,那里有相当丰富的使用说明文档及工具资源,这样就避免了在网络上找不到自己用到的相关应用时而苦恼无助的情况,谨以此心得与读者共勉!
举报

张琨

2021-9-23 14:13:43

根据st官方手册提供描述不难看出,ADC模拟看门狗其实就是用户可以设置一个AD值上下限值,然后打开此模拟看门狗中断开关,那么就会在检测到当IO输入转换AD值小于下限值或大于上限值时进入相应的中断函数。大致就是这么一个功能实现过程。

根据表63 可以看出,模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测。
那么明白了以上这些基础规则,那么我就要根据官方提供的库文件及里面的使用说明来配置相应函数来使用模拟看门狗。

打开此文件后下一步:

看!在这个官方提供的.c文件里面已经有介绍关于模拟看门狗使用的详细介绍的,只要理解了英文描述的意义,结合之前看数据手册关于ADC模拟看门狗的描述就会很快的完成模拟看门狗的配置程序。
下面即是完成的模拟看门狗配置函数:

最后还不要忘记加入打开看门狗中断的函数:
ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);
完整的配置过程如下:

void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
}
/*
模拟看门狗配置函数
单通道:7
*/
void ADC_WatchdogConfig(void)
{
ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_AnalogWatchdog_Channel_7);
ADC_AnalogWatchdogThresholdsConfig(ADC1,4050,0);
ADC_AnalogWatchdogCmd(ADC1,ENABLE);
ADC_AnalogWatchdogSingleChannelCmd(ADC1,ENABLE);
}
以上就是对ADC模拟看门狗的使用做了一个小结,当然只是用了其中一部分功能,如有纰漏,请您指出,不胜感谢。
通过此次模拟看门狗的使用,我更加明白要利用官方资源的重要性,解铃还须系铃人,这句话非常适合做技术的人,当遇见问题时,无从下手或不知怎么样下手才会效率高的解决问题时,这时就应该想到生产厂家才是解决问题的源头关键,那里有相当丰富的使用说明文档及工具资源,这样就避免了在网络上找不到自己用到的相关应用时而苦恼无助的情况,谨以此心得与读者共勉!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分