完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
IO引脚复用功能初始化
我们需要将PA9和PA10当做USART1的Tx和Rx引脚来用,也就是说此节课的PA9和PA10已不是通用IO的作用了,而是芯片内部的外设的接口引脚。STM32将这种应用叫做“I0引脚复用”,这也就说PA9将被配置成“复用推挽输出模式”,PA10将被配置成“复用上拉输入模式”。 IO引脚的复用功能 我们知道,STM32F4 有很多的片内外设,这些外设的外部引脚都是由GPIO 复用得来的。也就是说,一个 GPIO如果可以复用为片内外设的功能引脚,那么当这个 GPIO 作为片内外设使用的时候,就叫做复用。并且片内外设的功能引脚也不是随意复用的,也就是说片内外设的功能引脚是特定在某个或者多个GPIO引脚上的。例如USART1的Tx引脚就固定在PA9/PA15上,Rx引脚就固定在PA10/PB3上。具体的哪个外设可以在哪个GPIO上进行复用,详细知识在《RM0383_STM32F411CCU6_Reference manual》第八章和《STM32f411xC Datasheet》芯片数据手册有详细的讲解。我们这里只讲解外设复用配置库函数。 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) 第一个参数GPIO_TypeDef* GPIOx:表示哪个GPIO端口。 第二个参数uint16_t GPIO_PinSource:表示哪个IO口。 第三个参数uint8_t GPIO_AF:哪个外设功能。 我们来看看这最后一个参数uint8_t GPIO_AF的可能取值。如图下图所示: 例如:我们需要将PA9和PA10复用为USART1的Tx和Rx引脚,我们就可以调用此函数实现。 如上所示调用GPIO_PinAFConfig();就将PA9和PA10复用为复用为USART1的Tx和Rx引脚了,当然PA9和PA10需要初始化为复用模式。其他外设复用方法类似。 USART的IO引脚初始化 USART1GPIO配置如下图所示: GPIO在上一节已讲过无需多说,需要注意是void GPIO_Config(void);是我们自己写的函数,还有就是PA9只需要配置成复用输出模式,PA10需要配置成复用输入模式。 USART外设初始化流程 USART的初始化所需要调用到stm32f4xx_usart.c和stm32f4xx_usart.h文件,其中.h文件中存放了关于USART的所有功能接口函数,大家需要仔细研究。在这里就不一一讲解。 USART1外设初始化的步骤如下图所示: 如上图所示USART1初始化的流程,这也是所有外设的初始化流程,和GPIO初始化不一样的地方,就是第四步外设使能,我们初始化完成后一定要使外设,否者外设将不会正常工作。 Printf()函数的重定向 经过前面的流程我们已经完成了所有的初始化工作,我们下面就可以直接调用串口数据发送函数USART_SendData();和串口数据接收函数USART_ReceiveData();来时实现DragonFly学习平台与电脑的通信实验,也就是通过USART1将数据打印到电脑。我们刚学习C语言时都是通过函数printf()将需要显示的数据打印到电脑,但是原来我们是在电脑上直接编程可以直接调用此函数,但是我们现在在STM32上编程则无法直接调用printf()来打印数据。那我们就需要将printf()重定向到串口,然后实现打印功能。如下图所示: 这个函数很简单就是调用USART_SendData()函数发送一字节数据,然后等待数据发送完成。USART_GetFlagStatus(USART1,USART_FLAG_TXE);的意义是获取USART1的发送数据寄存的状态,如果有数据函数就返回0,如果没有数据函数就返回1。 Printf的打印实验 外设准备完成,我们就在main.c里调用printf();打印一句话到电脑串口调试助手代码如图所示: 看上图我们发现和上一节GPIO的main.c差别较大,这次显得更简洁。主要是这次我们将GPIO外设初始函数和USART外设初始化函数分别放在单独的.c和.h文件中,然后像第一节课我们添加库文件一样将,led.c和led.h还有usart.c和usart.h都添加到我们之前预留的DRIVER工程文件夹中,然后我们以后需要调用哪个外设就只需包含他的头文件,直接调用即可。 如图2,3行代码就是包含了GPIO和USART的头文件,初始化GPIO和USART时,只需要调用我们提前写的初始化函数即可,像上图11、12那样调用LED_init();和USART_init();两个函数就将两个GPIO和USART初始化完成了。这样让我们的项目更容易管理也看起来更简洁,建议大家以后也用此方法。每个外设就建一个.c和.h文件,然后添加到工程中来(一定要注意包含头文件路径)。 Main.c里的程序写好后,编译通过后下载进入DragonFly学习平台,如果会发现D5闪烁,说明程序运行良好。然后打开串口调试助手,设置必须严格按照USART初始化的帧格式设置,否者无法正常通信如图所示: 最后按硬件连接图连接电脑,串口调试助手上显示如下图所示: 如出现如图说示数据说明DragonFly串口与电脑串口通信成功,如果没有数据可参考我每节课后附的源码仔细对比研究。 注意:
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1877 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1145 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
760 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
612浏览 3评论
629浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 01:50 , Processed in 0.837393 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号