大家好,小东方来为大家解答以上的问题。usart串口,usart这个很多人还不知道,现在让我们一起来看看吧!
1、实际上两个函数实现的功能是一样的,都是清除相对应的标志位,只是标志位和中断位含义不一样,是标志位但是不一定会产生中断。
2、例如:#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)这是标志位,有的标志位不能产生中断标志位在程序中可以作为判定条件,支持程序的运行,中断则是跳转到中断函数执行。
3、两个函数实现的功能是一样的,在中断程序中可以用两个中的任一个。
4、我想区分两个函数是为了更清晰吧。
5、还有#define ADC_IT_EOC ((uint16_t)0x0220)#define ADC_FLAG_EOC ((uint8_t)0x02)这两个数值不同是因为标志位只是为了清除标志位而设的,而中断位设置成这个值是因为在其他函数中这一位还有其他用途。
6、而且还要注意: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;其实状态位只能有硬件置位,软件只能读和清零,所以这样写也是正确的。
7、OK,问题总是越辩越清晰的。
本文到此分享完毕,希望对大家有所帮助。