stm32笔记--1硬件

本文介绍了嵌入式系统中常用的几种存储器件:NorFlash、NandFlash、SRAM、SPIFlash及I2CEEPROM。NorFlash适用于执行程序,而NandFlash用于存储数据;SRAM是一种静态随机访问存储器,无需刷新即可保持数据;SPIFlash具有快速数据存取等优点;I2CEEPROM则适合用于掉电数据保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1开发板简介

Nor Flash

Nor Flash的特点是芯片内执行,这样应用程序可以直接在Flash内存内执行,不必把代价吗读到系统RAM中;而且Nor的传输效率很高,在1~4MB的时候具有很高的成本效益。但是很低的写入速度和查处速度影响了它的性能。
Nor Flash一般较小,可用于保存操作系统和一些重要数据。

Nand Flash

Nand Flash和Nor Flash都是Flash的一种,都是闪存。Nand Flash一般比较大,比Nor Flash贵。
Nor Flash写入的速度慢但是读取的速度快,而Nand Flash读的速度慢,但是写和擦除的速度比较快。
所以Nor Flash一般是用来执行程序,而Nand Flash用来存储数据,

SRAM

SRAM是Stastic Random Access Memory的缩写,中文为静态随机访问存储器。“静态”是指只要不掉电,存储在SRAM中的数据就不会丢失;这一点玉DRAM不同,DRAM需要进行周期性的刷新操作

SPI Flash

具有掉电数据不丢失、快速数据存取、电可擦除、容量大、在线可编程、价格低廉以及足够多的擦写次数(一百万次)和较高的可靠性等诸多优点

I2C EEPROM

用于掉电数据保存,因为STM32内部没有EEPROM,这里我们外接了24C02,可用于保存设备的一些配置数据,或者一些不需要经常修改的数据

### STM32 硬件 I2C 学习教程 #### 1. 理解 STM32 硬件 I2C 的特点和挑战 STM32系列微控制器中的硬件I2C模块虽然功能强大,但也存在一些已知的问题。例如,在某些情况下可能会遇到死机现象[^2]。这可能是由于复杂的寄存器配置以及为了避开专利保护所采取的设计策略造成的。 #### 2. 配置 STM32 硬件 I2C 模块 要成功地利用STM32硬件I2C接口进行数据交换,首先要正确初始化该外设并设定其工作参数。对于STM32F103而言,可以通过标准库函数或HAL库来进行这些操作[^3]。 ```c // 初始化I2C外设结构体定义 static void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; // 设置时钟频率为100kHz hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; HAL_I2C_Init(&hi2c1); } ``` 这段代码展示了如何通过调用`MX_I2C1_Init()`函数来完成对I2C1端口的基本设置过程,包括指定总线速度、地址长度等重要属性。 #### 3. 实现简单的读写操作 一旦完成了上述准备工作,则可以编写程序去执行具体的发送接收动作: ```c uint8_t data_to_send[] = {0x0A, 0x0B}; HAL_StatusTypeDef status; status = HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)(SLAVE_ADDR << 1), data_to_send, sizeof(data_to_send), HAL_MAX_DELAY); if(status != HAL_OK){ Error_Handler(); } uint8_t received_data[2]; status = HAL_I2C_Master_Receive(&hi2c1, (uint16_t)(SLAVE_ADDR << 1), received_data, sizeof(received_data), HAL_MAX_DELAY); if(status != HAL_OK){ Error_Handler(); } ``` 这里给出了两个例子——一个是向从设备发送一组字节;另一个是从目标节点获取相同大小的信息包。每次交互都伴随着错误处理机制以确保系统的稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值