我们在做STMCU开发的前期往往需要作芯片的选型,一般先会看选型手册和数据手册。其中有两个地方经常让人一下子难解其意。一个是关于USART/UART的地方,另一个是关于SPI/I2S的地方。
先不妨以STM32F407为例。下面是STMCU选型手册和数据手册相关信息的截图。
从选型手册上看到,STM32F407 的SPI 标了3个,I2S标了2个。这里往往会被误解为3个SPI接口再额外加2个I2S接口。其实不然,我们可以进一步查看数据手册,数据手册里将SPI/I2S写在一起了。这里正确理解应该是说最多3个SPI接口,其中有2个SPI接口与I2S复用,SPI功能与I2S功能是互斥的,即如果作SPI就不能做I2S,反之亦然。
至于USART/UART ,这个地方经常有人问起,不过还是比较好理解。仍然以上面的STM32F407 为例。选型手册写的4+2,数据手册写的4/2,应该说选型手册表述更直观。其实就是4个USART,外加2个UART。或者泛称6个UART ,只是其中有4个还支持同步传输,即USART,那个S就是同步的意思。下图是STM32F407的USART/UART汇总表。
在上面图中箭头所指的SPI MASTER栏,我画了4个红圈。表示USART工作在同步模式可以配置为SPI主模式。工作原理如下图所示。
好,我们再多一颗STM32L082K数据手册关于SPI/I2S的描述。截图如下:
咋一看,这里SPI/I2S描述稍显另类。那上方用小括号括起来的1表示下方有相关注释的意思。那个0应该是表示该芯片没有I2S接口。关于(1)的注释如下:
该注释是说有3个SPI是来自于USART配置在SPI MASTER模式,即刚才前面所提到的。这跟该芯片有3个USART吻合。根据表格理解这里可以有4个SPI接口的意思,那应该还有一个SPI才对。数据手册相关部分也有描述,的确还有个单独的SPI模块,可以工作在主从模式,支持双工或半双工模式。
看到这里,可以得出结论,STM8L082K芯片有3个USART ,1个独立的可工作在主从模式下的SPI。另外,可以将3个USART配置为3个工作在主模式下的SPI 。不支持I2S接口。
上面提到的两个地方经常有人问起或觉得不解,就此机会分享出来,不必为此过多纠结和浪费时间,愿帮到你就好。
关键字:STM32 SPI I2S USART UART
引用地址:
STM32手册上的SPI/I2S及USART/UART识读话题
推荐阅读最新更新时间:2024-03-16 15:07
stm32+lwip的物联网开发——学习过程(1)
由于一个IOT的项目,顺理成章地学习stm32+lwip。本来先学stm32可能会好一些,但时间原因,只能一起上了。 在看过一次视频教程,自己亲自移植了一次后,所谓“例程”一直没有成功。终于在这一刻,UCOS下终于ping通,也自己写了一个点灯的实验成功了。真正感觉自己做了点什么事,而且对于lwip,至少是最基本的lwip,还有stm32的简单应用有了初步了解。 stm32在无操作系统时,在入口函数中配好时钟参数后,进行各类初始化之后,就开始跑一个lwip_periodic_handle的函数,死循环。是一个广播函数。 在有操作系统时,直接开启os task和os, 其他的功能全在中断回调里面。 void LwIP
[单片机]
基于STM32+华为云设计的智慧烟感系统
一、概述 当前基于 STM32 和华为云,设计了一种智慧烟感系统,该系统可以 检测 烟雾,同时将检测到的数据上传到云端进行处理和分析。系统可用于家庭、办公室等需要安装烟雾报警器场所。 二、系统设计 2.1 系统 硬件 设计 【1】硬件平台 该系统主要使用STM32F103ZET6 微控制器 作为核心 控制器 ,并搭配 数码 显示器、蜂鸣器、MQ4烟雾 传感器 、WiFi模块等作为辅助组件。 【2】系统连接 STM32F103ZET6微控制器通过GPIO连接数码显示器、蜂鸣器、MQ4烟雾传感器等外设。通过 UART 连接WiFi模块,将读取到的数据上传到云端。 【3】系统工作流程 系统在启动时,首先进行硬件初始化和WiFi连
[单片机]
STM32硬件I2C问题
1.CUBEMX生成代码后I2C总线初始化一直出现 I2C_FLAG_BUSE 1.1 环境: 1.2 硬件I2C配置为默认,管脚如下 1.3 时钟等其他 配置完成后生成工程 1.4 添加代码 在i2c.c文件中的的void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)函数中添加如下代码 __I2C2_FORCE_RESET(); __I2C2_RELEASE_RESET(); 实际如下图 这里采用读取板载的MPU6050的设备地址来确认硬件I2C是否工作正常。 主函数里main.c添加程序如下: /* USER CODE BEGIN PV
[单片机]
51单片机(二)—— GPIO&Uart
一、GPIO 1.1 内部上拉电路 51单片机的I/O口都可以同时作为输入和输出之用。除了P0口以外,其他的I/O口都有内部上拉电阻。 3个内部上拉电阻都有不同的功用,要理解这个电路需要一定的模拟电路的知识。 内部上拉电阻示意图 由于相关的硬件配置,在编程时有以下需要注意的地方: 当I/O口被用作输入用途时,读取输入前要保证锁存器状态为1。 当将I/O口由低拉高时,指令执行后需要1~2个机器周期才能使实际的输出变成高电平。 在外围电路上需要注意的地方: P0口做普通I/O使用时,要加上拉电路,因为其没有内部上拉。 为防止电流过大,必要时外加限流电阻。 1.2 编程示例 51单片机的I/O口在使用时,并不需要对其
[单片机]
STM32汇编指令(一)WFI 和 WFE
ARM汇编的调用 嵌入式开发,尤其是编写BSP的时候,非常接近底层,这个时候有可能用一些汇编指令来保证程序的简洁和高效,但是平常编写代码用到的都是C/C++,那么如何使用汇编指令呢? 其实这个问题也很简单,在C/C++中提供了关键字asm或者ASM来内嵌汇编,使用如下: asm( WFI ); 但是这种方法问题比较大,在Cortex-M平台上,这个语句有很大几率编译不通过,因为各家编译器又实现了自己的宏,具体可以在core_cmx.h中看到,如果我们的项目要在不同的编译器上通过,可以考虑使用条件编译来达标,不过这样付出的成本就很大。 另外一种简单的方法是使用intrinsic.h这个头文件,这个头文件把所有的汇编
[单片机]
基于STM32单片机采集数据&数据上云
前言 以往采集数据均是采用Arduino开发板、esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,功能非常强大,为本次实验提供了无限可能。 参考博客:https://blog.csdn.net/weixin_43271542/article/details/117384011?spm=1001.2014.3001.5502 1.实验原理 本项目采用ARM结构中最为代表的Cortex-M4系列的芯片,选用STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度传感器。传感器将采
[单片机]
一种无OS的STM32实用软件框架编程案例
一种无OS的STM32实用软件框架,包括任务轮询管理,命令管理器、低功耗管理、环形缓冲区等实用模块。系统中广泛利用自定义段技术减少各个模块间的耦合关系,大大提供程序的可维护性。 主要功能 支持模块自动化管理,并提供不同优先等级初始化声明接口。 支持任务轮询管理,通过简单的宏声明即可实现,不需要复杂的声明调用。 支持低功耗管理,休眠与唤醒通知。 支持命令行解析,命令注册与执行。 blink设备支持,统一管理LED、震动马达、蜂鸣器 使用说明 点击STM32嵌入式开发公众号文末的“阅读原文”,可以完整的工程代码,系统开发平台如下: MCU:STM32F401RET6 IDE:IAR 7.4或者K
[单片机]
STM32系统中如何数据掉电保护
在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。如果单从实用性来讲,在stm32的系统中,诸如此类的应用,笔者推荐如下2个方法可以去尝试和借鉴。 基于备份寄存器 原理:对于大容量的MCU系列来说,它有着42个16bit的备份寄存器,而中小容量的微处理器却只有10个16bit的备份寄存器。以STM32F103C8T6为例,42个备份寄存器的地址偏移为:0x04~0x28,0x40~0xBC,共可以存储84个byte数据。备份寄存器是依赖者备份电源的,当外界的VDD掉
[单片机]