完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
最近在搞STM32F031的项目,F0系列与常用的F1系列有一定区别,在开发过程中遇到一些问题,而且花了好长花间在搜寻解决之道,仅此记录一下开发过程,也给后来者提供一些帮助。此篇博客介绍两款芯片的差别,下篇文章介绍详细配置过程。 GPIO移植过程(与F1系列的一些区别) 与 F1 系列相比, STM32F0 GPIO 外设内置了多个新特性,主要包括: ● GPIO 映射到 AHB 总线上,可以获得更佳的性能。 ● I/O 引脚复用器和映射:引脚通过多路复用器连接到片上外设 / 模块,该复用器一次只允 许一个外设复用功能 (AF) 连接到 I/O 引脚。这样便可确保共用同一个 I/O 引脚的外设之 间不会发生冲突。 ● I/O 配置的方式和特性更加丰富。 F0 GPIO 外设是一项全新的设计,因此在结构、特性和寄存器方面均不同于 F1 系列中的 GPIO 外设。使用 GPIO 写入 F1 系列的任何代码都需要重写后才能在 F0 系列上运行。 复用功能模式 STM32F1 系列 I/O 用作复用功能的配置取决于所使用的外设模式。例如, USART Tx 引脚应配置为复用 功能推挽,而 USART Rx 引脚应配置为输入悬空或输入上拉。 为针对不同器件封装(尤其是引脚数较少的器件)优化外设 I/O 功能的数量,可以用软 件将某些复用功能重新映射到其它引脚上。例如,可将 USART2_RX 引脚映射到 PA3 (默认重映射)或 PD6(软件重映射)上。 STM32F0 系列 不论使用何种外设模式,都必须将 I/O 配置为复用功能,之后系统才能正确使用 I/O(输 入或输出)。 I/O 引脚通过复用器连接到片上外设/模块,该复用器一次只允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这样便可确保共用同一个 I/O 引脚的外设之间不会发生冲突。每个 I/O 引脚都有一个复用器,该复用器具有八路复用功能输入(AF0 到 AF7),可通过 GPIOx_AFRL 和 GPIOx_AFRH 寄存器对这些输入进行配置: — 通过配置 AF0 到 AF7 可以映射外设复用功能。 除了这种灵活的 I/O 复用架构之外,各外设还具有映射到不同 I/O 引脚的复用功能,这 可以针对不同器件封装优化外设 I/O 功能的数量。例如,可将 USART2_RX 引脚映射到 PA3 或 PA15 引脚上。 配置过程 — 在 GPIOx_MODER 寄存器中将所需 I/O 配置为复用功能 — 通过 GPIOx_OTYPER、 GPIOx_PUPDR 和 GPIOx_OSPEEDER 寄存器,分别选 择类型、上拉/下拉以及输出速度 — 将 I/O 连接到 GPIOx_AFRL 或 GPIOx_AFRH 寄存器中所需的 AFx 此处最重要的就是所有的GPIO都必须配置成复用。不可以直接将F103的GPIO配置直接复制过来。 此处以点亮LED为例: 输出模式 下面的示例介绍了如何在 STM32 F1 系列中配置输出模式下的 I/O(例如,用于驱动 LED): GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xxMHz; /* 2、 10 或 50 MHz */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOy, &GPIO_InitStructure); 在 F0 系列中,用户必须按下列步骤更新此代码: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /* 推挽输出或开漏输出 */ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /* 无、上拉或下拉 */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xxMHz; /* 10、 2 或 50MHz */ GPIO_Init(GPIOy, &GPIO_InitStructure); 输入模式 下面的示例介绍了如何在 STM32 F1 系列中配置输入模式下的 I/O(例如,用作 EXTI 线): GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOy, &GPIO_InitStructure); 在 F0 系列中,用户必须按下列步骤更新此代码: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; /* 无、上拉或下拉 */GPIO_Init(GPIOy, &GPIO_InitStructure); 模拟模式 下面的示例介绍了如何在 STM32 F1 系列中配置模拟模式下的 I/O(例如, ADC 或 DAC 通道): GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOy, &GPIO_InitStructure); 在 F0 系列中,用户必须按下列步骤更新此代码: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; /* 无、上拉或下拉 */ GPIO_Init(GPIOy, &GPIO_InitStructure); 串口 F0和F1系列在串口驱动程序上没有太大变动,变动的部分大部分是我没用到的,需要的自己去查找手册了。唯一需要的我这里贴出来。 DMA STM32F031的DMA库函数和F103的兼容,DMA可以直接搬运。区别就是通道有一些区别。 因为下一篇代码量和内容较多,所以此处多水一篇移植,具体的代码和介绍可以看下一篇。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
651浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
520浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
507浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:19 , Processed in 0.756247 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号