新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2018-5-29
- 在线时间
- 0 小时
|
1金钱
我的板子是战舰STM32F10X。
在例程中,对于usart1的配置是用的PA9,PA10,而且已知底层代码如下:
第一个问题是USART1的寄存器地址是如何算出的?(这里可能说明的不很具体,请看下文分解)
还有个问题就是比如说我要用PA0,PA1代替PA9,PA10的话可不可以呢?
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define PERIPH_BASE ((uint32_t)0x40000000)
#define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_AF_PP = 0x18
#define USART1 ((USART_TypeDef *) USART1_BASE)
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)//问题在这里:这个0x3800是怎么根据PA9和PA10以及其相关的寄存器地址算出来的??有没有计算公式??
void uart_init(u32 bound){
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
(其中这个是有关USART1的TX,RX配置)
|
最佳答案
查看完整内容[请看2#楼]
1,串口1只是和PA9\PA10引脚复用,内部寄存器没有关联;
2,所有特殊寄存器地址全部厂家定义好的,查看相关数据手册即可得到。
|