初级会员

- 积分
- 145
- 金钱
- 145
- 注册时间
- 2017-9-28
- 在线时间
- 43 小时
|
5金钱
[mw_shl_code=c,true]GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 [/mw_shl_code]
这是正点原子的usart例程代码,下面是我的看法(误解)
1.首先使能了usart1 和gpioa时钟 , usart功能应该是复用功能吧 为什么不使能afio而使能gpio呢?
2.还有,传输速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 是不是只需要定义一次就够了 ?定义的具体哪个的传输速度?gpioa?还是所有gpio?(因为这个结构体应该是代表了所有的gpio吧)
是不是只要初始化一次整个结构体就刷新了?因为两次初始化都在最下边
|
最佳答案
查看完整内容[请看2#楼]
1.复用功能不用开启afio时钟,重映射才需要
2.50MHZ是PA9和PA10两个引脚的速度,并不是所有gpio。因为这两个引脚的GPIO_Pin,GPIO_Mode设置不同,GPIO_Speed相同不用改,所以第二个GPIO_Init前没有设置GPIO_Speed,也就是保留了之前的设置。GPIO_Init函数没有对结构体成员进行变动(你说的刷新是不是指这个?), GPIO_InitStructure.ABC = abc这种语句才会修改结构体成员。
|