OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5661|回复: 6

问下大家USART_SendData(USART1, USART_RX_BUF[t]);中USART1怎么就成了USART_SendData函数中的入口参数了呢,

[复制链接]

43

主题

109

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1163
金钱
1163
注册时间
2019-10-22
在线时间
226 小时
发表于 2023-3-6 10:25:36 | 显示全部楼层 |阅读模式
5金钱
USART_TypeDef结构体中也没有USART1啊,这个指针变量是咋传递的啊,对这种指针变量做入口参数的一直不太明白

USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据         void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data));

  /* Transmit Data */
  USARTx->DR = (Data & (uint16_t)0x01FF);
}
typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;

#define USART1              ((USART_TypeDef *) USART1_BASE)



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

109

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1163
金钱
1163
注册时间
2019-10-22
在线时间
226 小时
 楼主| 发表于 2023-3-6 10:34:25 | 显示全部楼层
#define USART1_BASE           (APB2PERIPH_BASE + 0x3800)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define PERIPH_BASE           ((uint32_t)0x40000000)
USART1是不是一个经过多次封装的一个16进制数,也就是一个地址,成了入口参数
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
发表于 2023-3-6 10:45:49 | 显示全部楼层
你最后的那个宏定义不是吗?指向USART1_BASE的指针啊
我是小白,很白很白的小白!!!
回复

使用道具 举报

43

主题

109

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1163
金钱
1163
注册时间
2019-10-22
在线时间
226 小时
 楼主| 发表于 2023-3-6 11:07:05 | 显示全部楼层
程功之道 发表于 2023-3-6 10:45
你最后的那个宏定义不是吗?指向USART1_BASE的指针啊

那USART1的实质是不是系统已经定义好的一个16进制数
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-3-6 11:15:08 | 显示全部楼层
Xiuer666 发表于 2023-3-6 11:07
那USART1的实质是不是系统已经定义好的一个16进制数

可以这么理解吧,实际外设的内存地址
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-3-6 11:29:13 | 显示全部楼层
USART1本身就是个结构体指针,它指向了外设的地址(通过宏定义强制类型转换实现的)。
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4638
金钱
4638
注册时间
2017-7-6
在线时间
705 小时
发表于 2023-3-7 08:31:06 | 显示全部楼层
Xiuer666 发表于 2023-3-6 11:07
那USART1的实质是不是系统已经定义好的一个16进制数

类似于这样啊(*)0x1234,0x1234是外设的地址,就是该外设在芯片内存中的地址
我是小白,很白很白的小白!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表