
STM32
文章平均质量分 84
stm32理论与实战
Bin Watson
这个作者很懒,什么都没留下…
展开
-
移植 NetXDuo 到 STM32F4 芯片
ST 提供了一套 Azrtos 的软件包,里面切好有基于 ST 芯片以太网的 netxduo 驱动实现,软件包位于 GitHub 或者在 ST 的官网搜索 Cube Azrtos f4 找到软件包。文件,这个是 threadx 需要的用于获取堆栈指针和中断向量表的实现函数,这个文件可以使用。ThreadX 的移植不是本篇的重点,这里只是简要说明大致流程,详细请参考其它资料。由于本篇使用的是以太网,因此拷贝以太网的代码。下的所有 *.s 文件,除了。文件是芯片相关的文件,导入。函数,以便进行线程调度。原创 2023-10-08 10:53:36 · 1307 阅读 · 5 评论 -
STM32 GPS模块输出控制实现
本文是对 ATGM336H-5N GNSS模块的发送功能实现,已经验证过功能,供大家参考配置的目标:说明:配置发送帧使用CAS03标识:设置更新频率使用GAS02标识:配置使用的定位系统使用CAS04标识:发送函数GPS配置其它省略实现省略。最后效果如下:原创 2023-02-04 16:18:09 · 1942 阅读 · 0 评论 -
STM32H7 DMA阅读笔记
stm32h7 系统总线架构如下:在上图中可以看到有 MDMA、DMA、BDMA 三种 DMA,其实本质上三者都是差不多的,只是位于的域不同。一个 DMA 控制器有 8 个 streams,每个 stream 最多支持 115 个通道(请求)。每个 stream 拥有 4 字位宽 32 个大小的先进先出缓存区。这个缓存区可以被配置为循环缓存区。stream 可以被配置为 FIFO 模式和 Direct 模式两种:传输的单次传输的数据数量可以由软件设置(DMA flow controller),也可以由外原创 2022-11-02 16:05:36 · 2670 阅读 · 0 评论 -
STM32H7 DMAMUX 阅读笔记
当同步信号(dmamux_syncx)达到时,输入的 dmamux_reqx 会立刻被传播到 dmamux_req_outx 作为输出信号,同时通道内部的 DMA request counter 会开启计数,初始值是设置在 DMA_CxCR 寄存器的 NBERQ 位中。当 counter 递减到零时,会触发一次 dmamux_evtx 的事件,同时断开输入信号 dmamux_reqx 到输出 dmamux_req_outx 的连接。DMA 请求是一个源即来自外设或也可来自 DMAMUX 请求产生器。原创 2022-11-02 15:30:26 · 1294 阅读 · 0 评论 -
STM32H7 USART 时钟初始化
使用芯片 STM32H750XB,板子使用的是 安富莱的 stm32-V7 开发板。原创 2022-10-31 09:30:58 · 1865 阅读 · 1 评论 -
使用RS485芯片进行串口通讯
该程序源码来源于 安富莱V7开发板的第13个程序。原创 2022-10-29 18:39:39 · 4787 阅读 · 0 评论 -
USART发送与接收
当 USART_RDR 寄存器中的数据还未被读取(RXNE 未被置位),而此时又有新的数据到达 RX Shift Reg 寄存器,导致 RX Shift Reg 寄存器中的数据无法转移到 USART_RDR 寄存器就会发送 Overrun error。如果我们启动了 TxFIFO,那么该数据就会从 USART_TDR 被缓存到 TxFIFO 里,然后我们就可以接着往 USART_TDR 寄存器中写入数据,而不用担心覆盖 USART_TDR 中的数据。只要 TxFIFO 最终没有满,TXE 就会被设置为1。原创 2022-10-26 15:33:49 · 3358 阅读 · 0 评论 -
MPU 配置实战
M7 处理器的内存映射:(标准来源于 ARM)ARM 划定了一个大致的内存分配区间,如上图所示。各个厂商再根据自己芯片的实际情况进行详细的划分。如 STM32H750XB 芯片的划分如下。H750XB 芯片的内存划分:(来源于H750XB参考手册第二章第二节)原创 2022-10-16 15:30:15 · 1723 阅读 · 0 评论 -
write-back/write-through/write-allocate/write-no-allocate说明
write-back:将数据更新到 cache,并不更新到内存(DRAM),待后续 flush cache 时存入内存;write-allocate:将要写入的位置从内存读到cache,然后按照上述write hit继续操作;write-no-allocate:不会将要写入的数据从内存读到cache,直接将要写的数据写入内存。Read allocate,先把数据读取到 Cache 中,再从 Cache 中读数据。write-through:数据同时会更新到 cache 和内存;转载 2022-10-16 11:51:52 · 2106 阅读 · 0 评论 -
STM32操控外设为什么要先使能时钟
你要使用它,当然需要enable了。**只不过,在51单片机一个时钟系统把一切都包了,在STM32中,我们很明确地做好了分工,让大家各司其职,其实这样还有一个好处就是,不是每个外设都需要系统时钟那么高的频率,就像是高射炮打蚊子一个道理。可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。我也是,就是所谓的”时钟问题“。转载 2022-10-13 11:39:42 · 1110 阅读 · 0 评论 -
STM32 MPU 阅读笔记
MPU 可以将 memory map 内存映射区分为多个具有一定访问规则的区域,通过这些规则可以实现如下功能:防止不受信任的应用程序访问受保护的内存区域。防止用户应用程序破坏操作系统使用的数据。通过阻止任务访问其它任务的数据区。允许将内存区域定义为只读,以便保护重要数据。检测意外的内存访问。内存映射就是 32 位的 CM7 内核整体可以寻址的 0 到 2^32 -1 共计 4GB 的寻址空间。通过这些地址可以访 问 RAM、Flash、外设等。原创 2022-10-03 23:11:30 · 1154 阅读 · 0 评论 -
使用 CubeMX 配置 RCC 时钟
优势是低成本,无需外部时钟,快速启动(仅需几个微秒),缺点是精度差,即使经过校准。LSI 是内部的低速 RC 振荡器,频率约是 32KHz,主要用于独立看门狗和自动唤醒,也可以用于 RTC实时时钟。优势是精度高,缺点是增加成本。函数,该函数就是对 RCC 时钟的配置,只需要将其复制黏贴到我们的工程中就可以了。,通过外接时钟源,有源或者无源晶振驱动,一般接 32.768KHz,,频率约是 4MHz,相比 64MHz 的 HSI,主要用于低功耗。,频率约是 48MHz,用于给特定的外设提供时钟,比如 USB。原创 2022-10-03 11:17:59 · 2898 阅读 · 0 评论