打印

关于STM32的头文件

[复制链接]
4683|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lphaff|  楼主 | 2012-5-12 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在头文件里面,以stm32f10x_usart.h为例
比方说,对那个USART_MODE进行宏定义的时候,有三个宏定义
#define USART_Mode_Rx                        ((uint16_t)0x0004)
#define USART_Mode_Tx                        ((uint16_t)0x0008)
#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))

请问一下,,第三个宏定义是什么个意思呢?

因为我在定义结构体USART_InitTypeDef USART_STR时,
使用USART_STR.IS_USART_MODE 时报错,,,


谢谢。
沙发
aozima| | 2012-5-12 12:00 | 只看该作者
从名称直译是: 是串口模式吗?

使用特权

评论回复
板凳
lphaff|  楼主 | 2012-5-12 12:18 | 只看该作者
2# aozima
:(

使用特权

评论回复
地板
st316| | 2012-5-12 23:10 | 只看该作者
IS_USART_MODE(MODE)只是实现对MODE这个参数的检查用的吧,
USART_InitTypeDef这个结构体里面并没有IS_USART_MODE这个元素,当然会报错呀。
库文件里是这么定义的:
typedef struct
{
  uint32_t USART_BaudRate;            /*!< This member configures the USART communication baud rate.
                                           The baud rate is computed using the following formula:
                                            - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))
                                            - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */

  uint16_t USART_WordLength;          /*!< Specifies the number of data bits transmitted or received in a frame.
                                           This parameter can be a value of @ref USART_Word_Length */

  uint16_t USART_StopBits;            /*!< Specifies the number of stop bits transmitted.
                                           This parameter can be a value of @ref USART_Stop_Bits */

  uint16_t USART_Parity;              /*!< Specifies the parity mode.
                                           This parameter can be a value of @ref USART_Parity
                                           @note When parity is enabled, the computed parity is inserted
                                                 at the MSB position of the transmitted data (9th bit when
                                                 the word length is set to 9 data bits; 8th bit when the
                                                 word length is set to 8 data bits). */

  uint16_t USART_Mode;                /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
                                           This parameter can be a value of @ref USART_Mode */

  uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled
                                           or disabled.
                                           This parameter can be a value of @ref USART_Hardware_Flow_Control */
} USART_InitTypeDef;

使用特权

评论回复
5
jxmzzr| | 2012-5-12 23:51 | 只看该作者
看看原型,呵呵,一切尽在不言中。

使用特权

评论回复
6
lphaff|  楼主 | 2012-5-13 09:32 | 只看该作者
4# st316

IS_USART_MODE(MODE) 是用来配置USART_InitTypeDef里的那个USART_Mode的,而不是说就是USART_InitTypeDef这个结构体里的成员。

使用特权

评论回复
7
st316| | 2012-5-13 09:37 | 只看该作者
6# lphaff 配置MODE不是这样吗:
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

使用特权

评论回复
8
st316| | 2012-5-13 10:03 | 只看该作者
4# st316

IS_USART_MODE(MODE) 是用来配置USART_InitTypeDef里的那个USART_Mode的,而不是说就是USART_InitTypeDef这个结构体里的成员。
lphaff 发表于 2012-5-13 09:32

既然不是结构体里的成员,请问“USART_STR.IS_USART_MODE”这又是什么意思呢?

使用特权

评论回复
9
lphaff|  楼主 | 2012-5-14 09:54 | 只看该作者
8# st316

还是兄弟观察仔细啊。
这里是打错了,
应该是USART_SRT.MODE=IS_USART_MODE(MODE)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

540

帖子

2

粉丝