STM32的几个深入功能
目录
- 1、时钟源
- 2、锁相环
- 3、备份SRAM
- [4、low power mode](#4、low power mode)
- [5、DMA Flash RAM](#5、DMA Flash RAM)
- 6、复位类型
- 7、CMSIS
- 8、STM32F4学习方法
- 9、中断
- [10、8080 并行接口](#10、8080 并行接口)
- 11、FSMC
- 12、ADC
- 13、IIC
- 14、SPI
- 15、485
- 16、CAN
- 17、MPU6050六轴传感器
- [18、NRF24L01 2.4G无线模块](#18、NRF24L01 2.4G无线模块)
- 19、FLASH
- 20、外部SRAM
- 21、SD卡+FATFS
- 22、IAP
- 23、USB
- 24、TCP
- 25、UCOSII
1、时钟源
- HSI是高速内部时钟,RC振荡器,频率为8MHz。
- HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
- LSI是低速内部时钟,RC振荡器,频率为40kHz。
- LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
- PLL为锁相环倍频输出,其时钟输入源可选择为HSI、HSE。倍频可选择为2~16倍。
2、锁相环
鉴频鉴相器将+IN端的FREF输入与和-IN端的反馈信号进行比较。它使用两个D型触发器和一个延迟元件.
-IN频率将随着VCO频率的提高而提高,两个PFD输入最终会收敛或锁定到相同频率
3、备份SRAM
STM32F4提供4KB的备份SRAM,在开发程序时可以用于存储掉电不丢失的数据(需要RTC纽扣电池支持),特别是一些实时修改的,掉电不能丢失的数据,比如我用于存储雨量累计流量等实时变化的数据,定时存储到flash,实时存储到备份区(不能频繁的写flash),当备份区数据丢失了再从flash加载,否则每次都从备份区加载。
原文链接:https://blog.csdn.net/c1063891514/article/details/109404100
很可能存在备份数据丢失问题
4、low power mode
● Sleep mode
PLL (168 MHz)
All peripherals disabled
Wakeup using EXTI Line
● Stop mode with RTC
RTC Clocked by LSI
HSI, HSE OFF and LSI if not used as RTC Clock source
Wakeup using RTC
● Standby mode
Backup SRAM and RTC OFF
LSI OFF
Wakeup using Wakeup Pin (PA.00)
● Standby mode with RTC clocked by LSI
RTC Clocked by LSI
Backup SRAM OFF
Wakeup using RTC clocked by LSI
● Standby mode with RTC clocked by LSI and BKPSRAM
RTC Clocked by LSI
Backup SRAM ON
Wakeup using RTC clocked by LSI
5、DMA Flash RAM
DMA transfer data from Flash memory to RAM
6、复位类型
1.NRST 引脚低电平(外部复位)
2.窗口看门狗计数结束( WWDG 复位)
3.独立看门狗计数结束( IWDG 复位)
4.软件复位( SW 复位)
7、CMSIS
CMSIS_百度百科 (baidu.com)
8、STM32F4学习方法
三本参考资料,即《STM32F4xx 中文参考手册》、《STM32F3 与 F4 系列 Cortex M4内核编程手册》和《Cortex M3 与 M4 权威指南》。
时钟树图
9、中断
10、8080 并行接口
8080 并行接口的发明者是 INTEL,该总线也被广泛应用于各类液晶显示器。
在 8080 方式下读数据操作的时候,我们有时候(例如读显存的时候)需要一个假读命
(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是我们真正要读的数据。
------STM32F4开发指南-库函数版本_V1.1,page239
11、FSMC
灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器SRAM连接,
STM32F4 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。
地址线(如 A0~A18)、数据线(如 D0~D15)、写信号(WE)、 读信号(OE)、片选信号(CS)
12、ADC
ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。
模式:单次、连续、扫描、间断
规则通道组和注入通道组
13、IIC
CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
14、SPI
主机和从机都有一个串行移位寄存器,主机通过向它的 SPI 串行寄存器写入一个字节来发起一次传输。寄存器通过 MOSI 信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过 MISO 信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
W25Q128 的最小擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区
在 W25Q128 的任意地址开始写入任意长度(必须不超过 W25Q128 的容量)的数据。我们这里简单介绍一下思路:先获得首地址(WriteAddr)所在的扇区,并计算在扇区内的偏移,然后判断要写入的数据长度是否超过本扇区所剩下的长度,如果不超过,再先看看是否要擦除,如果不要,则直接写入数据即可,如果要则读出整个扇区,在偏移处开始写入指定
长度的数据,然后擦除这个扇区,再一次性写入。当所需要写入的数据长度超过一个扇区的长度的时候,我们先按照前面的步骤把扇区剩余部分写完,再在新扇区内执行同样的操作,如此循环,直到写入结束。这里我们还定义了一个 W25QXX_BUFFER 的全局变量,用于擦除时缓存扇区内的数据。
15、485
(390条消息) RS485收发的3种典型电路-重点-自动收发电路_485典型电路_猪哥-嵌入式的博客-CSDN博客
16、CAN
多主控制。在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元
同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是
表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始
发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级
最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),
检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单
元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新
发送此消息直到成功发送为止(错误恢复功能)。
故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)
还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上
发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
在 CAN 总线的起止端都有一个 120Ω的终端电阻,来做阻抗匹配,以减少回波反射
数据帧一般由 7 个段构成
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。
(5) CRC 段。检查帧的传输错误的段。
(6) ACK 段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。
显性电平,隐形电平
过滤器
17、MPU6050六轴传感器
IIC
配置满量程范围、采样频率
18、NRF24L01 2.4G无线模块
SPI
//在指定位置读出指定长度的数据
status=SPI1_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值
for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI1_ReadWriteByte(0XFF);
节点地址、通道
清除TX FIFO、RX FIFO寄存器
19、FLASH
FLASH空间分配
I2C-EEPROM 的FLASH AT24C02
SPI 的 2M FLASH W25X16
20、外部SRAM
IS62WV51216
21、SD卡+FATFS
SDIO
22、IAP
Bootloader编程
1.指令:IAP升级
FLASH_If_Write(APPLICATION_ADDRESS + userapplen, (uint32_t*)uart_buf, temp / 4)
2.指令:关闭全部中断,反初始化外设,跳转到APP
JumpAddress = (__IO uint32_t ) (APPLICATION_ADDRESS + 4);
JumpToApplication = (pFunction) JumpAddress;
__set_MSP((__IO uint32_t ) APPLICATION_ADDRESS);
JumpToApplication();
原文链接:https://blog.csdn.net/sudaroot/article/details/106932736
23、USB
:
24、TCP
:
25、UCOSII
只需要修改:os_cpu.h、os_cpu_a.asm 和 os_cpu.c等三个文件即可,其中:
os_cpu.h,进行数据类型的定义,以及处理器相关代码和几个函数原型;
os_cpu_a.asm,是移植过程中需要汇编完成的一些函数,主要就是任务切换函数;
os_cpu.c,定义一些用户 HOOK 函数。
os_cfg.h 里面定义 OS_TICKS_PER_SEC 的值为 200,也就是设置 UCOSII
的时钟节拍为 5ms,同时设置 OS_MAX_TASKS 为 10,也就是最多 10 个任务(包括空闲任务和统计任务在内)
信号量是一类事件。使用信号量的最初目的,是为了给共享资源设立一个标志,该标志表
示该共享资源的占用情况。这样,当一个任务在访问共享资源之前,就可以先对这个标志进行查询,从而在了解资源被占用的情况之后,再来决定自己的行为。
消息队列由三个部分组成:事件控制块、消息队列和消息。当把事件控制块成员 OSEventType 的值置为 OS_EVENT_TYPE_Q 时,该事件控制块描述的就是一个消息队列。