你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

标志位和中断位的区别:USART_ClearFlag和USART_ClearITPendingBit

[复制链接]
万里-363223 发布时间:2015-1-5 15:22
以下是我对标志位和中断位的看法:在STM32的函数库中,这两个函数实现的功能其实是一样的,都是清除对应的标志位,但是标志位和中断位的含义不一样,不是所有的标志位都可以产生中断。查看源代码如下:#define ADC_IT_EOC                                 ((uint16_t)0x0220)#define ADC_IT_AWD                                 ((uint16_t)0x0140)#define ADC_IT_JEOC                                ((uint16_t)0x0480)这是定义的中断位,可以产生中断#define ADC_FLAG_AWD                               ((uint8_t)0x01)#define ADC_FLAG_EOC                               ((uint8_t)0x02)#define ADC_FLAG_JEOC                              ((uint8_t)0x04)#define ADC_FLAG_JSTRT                             ((uint8_t)0x08)#define ADC_FLAG_STRT                              ((uint8_t)0x10)这是定义的标志位,二者对比可以发现有的标志位不能产生中断标志位在程序中可以作为判定条件,支持程序的运行,中断则是跳转到中断函数执行。两个函数实现的功能是一样的,在中断程序中可以用两个中的任一个。区分两个函数是为了更清晰的显示函数库的严谨。再具体分析下面的中断位和标志位:#define ADC_IT_EOC                                 ((uint16_t)0x0220)#define ADC_FLAG_EOC                               ((uint8_t)0x02)这两个数值不同是因为标志位只是为了清除标志位而设的,而中断位设置成这个值是因为在其他函数中这一位还有其他用途。而且还要注意:void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG){     /* Check the parameters */     assert_param(IS_ADC_ALL_PERIPH(ADCx));     assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));     /* Clear the selected ADC flags */     ADCx->SR = ~(uint32_t)ADC_FLAG;}这一句ADCx->SR = ~(uint32_t)ADC_FLAG;应该是ADCx->SR &= ~(uint32_t)ADC_FLAG;不过状态位只能由硬件置位,软件可以读和清零,所以这样写也是可以的。
收藏 1 评论0 发布时间:2015-1-5 15:22

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版