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

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

[复制链接]
thinkcode 提问时间:2015-3-30 10:42 /
在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)为假
收藏 评论10 发布时间:2015-3-30 10:42

举报

10个回答
木木鱼 回答时间:2015-3-30 11:26:21
不懂帮顶下!应该不会写错的,大厂商,而且用的人也不少,类似的好像没看见过,建议自己好好看下再
moyanming2013 回答时间:2015-3-30 12:38:48
IS_USART_CLEAR_FLAG(FLAG)中的FLAG是USART_FLAG_TXE& (uint16_t)0xFC9F吗?或者IS_USART_CLEAR_FLAG是否取反了?
thinkcode 回答时间:2015-3-30 14:45:31
moyanming2013 发表于 2015-3-30 12:38
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的固件库中的写法就不一样了。
moyanming2013 回答时间:2015-3-30 15:50:36
#define中“与”的第一项:
(((FLAG) & (uint16_t)0xFC9F) == 0x00)
当FLAG是USART_FLAG_TXE时
#define USART_FLAG_TXE                       ((uint16_t)0x0080)
显然((FLAG) & (uint16_t)0xFC9F)为true,则(((FLAG) & (uint16_t)0xFC9F) == 0x00)为false,后面的也就不用看了,IS_USART_CLEAR_FLAG(FLAG)为false。
再者,你不应该用F1的来示做F0的吧?
数码小叶 回答时间:2015-3-30 16:35:53
看了上面的我乱了
thinkcode 回答时间:2015-3-30 16:44:08
moyanming2013 发表于 2015-3-30 15:50
#define中“与”的第一项:
(((FLAG) & (uint16_t)0xFC9F) == 0x00)
当FLAG是USART_FLAG_TXE时

你前面说的没错,和我的结论也没区别。你说的最后一句,我的意思是说F0的固件库写法不一样,而且F0固件库中的写法明显很正确。这种参数判断,和硬件也没关系呀,我仅仅只是做对比
moyanming2013 回答时间:2015-3-30 16:48:50
thinkcode 发表于 2015-3-30 16:44
你前面说的没错,和我的结论也没区别。你说的最后一句,我的意思是说F0的固件库写法不一样,而且F0固件库 ...

IS_USART_CLEAR_FLAG(FLAG)为false说明没有清空FLAG标志啊,你是什么问题呢?
thinkcode 回答时间:2015-3-30 17:06:22
moyanming2013 发表于 2015-3-30 16:48
IS_USART_CLEAR_FLAG(FLAG)为false说明没有清空FLAG标志啊,你是什么问题呢?

你这句话真是错了,IS_USART_CLEAR_FLAG(FLAG)是用在断言里的,和清标志没有关系
moyanming2013 回答时间:2015-3-30 17:37:39
thinkcode 发表于 2015-3-30 17:06
你这句话真是错了,IS_USART_CLEAR_FLAG(FLAG)是用在断言里的,和清标志没有关系 ...

我没有说是要清空标志。
而是说这个只是判断下标志是否被清空,即结果是没有清空或已被清空。
12下一页
关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版