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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版