STM32固件库,这里是不是写错了

2019-07-14 17:38发布

STM32F10x_StdPeriph_Lib_V3.5.0中,stm32f10x_usart.h的第356行
#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))

来判断串口的一些标志位参数是否正确,而Flags定义如下
#define USART_FLAG_CTS                       ((uint16_t)0x0200)
#define USART_FLAG_LBD                       ((uint16_t)0x0100)
#define USART_FLAG_TXE                       ((uint16_t)0x0080)
#define USART_FLAG_TC                        ((uint16_t)0x0040)
#define USART_FLAG_RXNE                      ((uint16_t)0x0020)
#define USART_FLAG_IDLE                      ((uint16_t)0x0010)
#define USART_FLAG_ORE                       ((uint16_t)0x0008)
#define USART_FLAG_NE                        ((uint16_t)0x0004)
#define USART_FLAG_FE                        ((uint16_t)0x0002)
#define USART_FLAG_PE                        ((uint16_t)0x0001)


大家看一下第356行是不是错了,比如USART_FLAG_TXE& (uint16_t)0xFC9F  结果不为0,IS_USART_CLEAR_FLAG(FLAG)为假
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
7762642422d
1楼-- · 2019-07-15 03:15
IS_USART_CLEAR_FLAG(FLAG)中的FLAG是USART_FLAG_TXE& (uint16_t)0xFC9F吗?或者IS_USART_CLEAR_FLAG是否取反了?
kallon7250
2楼-- · 2019-07-15 07:51
7762642422d 发表于 2018-9-19 15:33
IS_USART_CLEAR_FLAG(FLAG)中的FLAG是USART_FLAG_TXE& (uint16_t)0xFC9F吗?或者IS_USART_CLEAR_FLAG是否取反了?

这是stm32f10x_usart.h的第356行的内容:
#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))
使用的时候IS_USART_CLEAR_FLAG没有取反,assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));

在F0的固件库中的写法就不一样了。
7762642422d
3楼-- · 2019-07-15 13:48
 精彩回答 2  元偷偷看……
youxi8745
4楼-- · 2019-07-15 14:38
看了上面的我乱了
kallon7250
5楼-- · 2019-07-15 19:03
7762642422d 发表于 2018-9-19 15:57
#define中“与”的第一项:
(((FLAG) & (uint16_t)0xFC9F) == 0x00)
当FLAG是USART_FLAG_TXE时

你前面说的没错,和我的结论也没区别。你说的最后一句,我的意思是说F0的固件库写法不一样,而且F0固件库中的写法明显很正确。这种参数判断,和硬件也没关系呀,我仅仅只是做对比
7762642422d
6楼-- · 2019-07-16 00:54
kallon7250 发表于 2018-9-19 16:32
你前面说的没错,和我的结论也没区别。你说的最后一句,我的意思是说F0的固件库写法不一样,而且F0固件库中的写法明显很正确。这种参数判断,和硬件也没关系呀,我仅仅只是做对比

IS_USART_CLEAR_FLAG(FLAG)为false说明没有清空FLAG标志啊,你是什么问题呢?

一周热门 更多>