跳转到主要内容

STM32

STM32的存储器映射详解

judy /

存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOT,BLOCK等进行统一编址。即用地址来表示对象。
这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。

Cortex-M3支持4GB的存储空间,它的存储系统采用统一编址的方式; 程序存储器、数据存储器、寄存器被组织在4GB的线性地址空间内,以小端格式(little-endian)存放。由于Cortex-M3是32位的内核,因此其PC指针可以指向2^32=4G的地址空间,也就是0x0000_0000——0xFFFF_FFFF这一大块空间。见图1:

STM32串口配置步骤

judy /

串口设置的一般步骤可以总结为如下几个步骤:

1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数

<strong>1.串口时钟使能。</strong>

串口是挂载在 APB2 下面的外设,所以使能函数为:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);

<strong>2.串口复位。 </strong>

void USART_DeInit(USART_TypeDef* USARTx);//串口复位

<strong>3.串口参数初始化。</strong>

串口初始化是通过 USART_Init()函数实现的,

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

stm32之通信

judy /

<strong>一、通信概述</strong>

按照数据传送方式分:

串行通信(一条数据线、适合远距离传输、控制较复杂)
并行通信(多条数据线、成本高、抗干扰性差)

按照通信的数据同步方式分:

异步通信(以1个字符为1帧、发送与接收时钟不一致)
同步通信(位同步、时钟一致)

按照数据的传输方向分:

单工(只能往一个方向传播)
半双工(数据传输可以沿两个方向,但是需要分时)
全双工(同时双向传输)

通信速率通常以比特率来表示,单位是:位/秒(bps),即每秒传输二进制代码的位数。之后会遇到一个波特率的概念,它表示每秒传输多少个码元。一般情况下,码元都是表示两种状态,即比特率=波特率。

<strong>二、串口通信</strong>

串口通信属于串行通信方式,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。在此基础上用户可以建立自己的高层通信协议。

串口通信的接口标准有很多,有RS-232、RS-232C、RS-422A、RS-485等。比较常用的就是RS-232和RS-485。

如何获取STM32 MCU的唯一ID

judy /

前段时间由于应用需要对产品授权进行限制,所以研究了一下有关STM32 MCU的唯一ID的资料,并最终利用它实现了我们的目标。

<strong>1、基本描述</strong>

在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中,对其功能的描述有3各方面:

• 用作序列号(例如 USB 字符串序列号或其它终端应用程序)
• 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性
• 激活安全自举过程等

在资料中对其特性的描述是:96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。

STM32F030 低温下 RTC 不工作

judy /

<strong>1 前言</strong>

客户反馈在批量生产阶段,发现部分产品的 MCU 的 RTC 在低温(0℃)下工作不正常,但是在常温下又是正常的,且其他正常的 MCU 的 RTC 在常温与低温下都是正常的。

<strong>2 问题跟进与分析</strong>

通过与客户邮件沟通,了解到客户使用的 MCU 型号是:STM32F030C6T6TR。在产品的主从结构中主要用作电源管理和时钟管理。通过客户的描述,似乎相同型号不同片子都存在较大的差异。

意法半导体的新STM32探索套件简化移动网至云端连接,并提供免费试用的第三方服务

judy /

意法半导体专门配置的两个STM32探索套件让物联网设备能够通过2G/3G或LTE Cat M1/NB1网络快速连接云服务,让大众市场开发人员更自由、更灵活地开发应用。

每款套件都包括一个STM32L496探索板和集成一个Quectel蜂窝移动网络调制解调器的STMod+ 蜂窝扩展板。配套软件包括X-CUBE-CLD-GEN,这是一个移植到STM32L496超低功耗微控制器和扩展板的Espruino嵌入式JavaScript引擎,兼容STM32Cube生态系统。

硬件可直接使用,开发人员可以在JavaScript引擎上快速启动并定制脚本示例,无需额外投资。X-CUBE-CLD-GEN扩展套件支持STM32Cube软件工具、固件库和例程,有助于加快C代码开发,取得最佳的软件性能。

这些关于STM32 DMA的使用,你都知道吗?

judy /

<strong>使用范围</strong>

DMA(直接存储器存取)提供在外设与存储器之间或者存储器和存储器之间的高速数据传输使用。

这里的外设指的是32的外设,比如spi、usart、iic、adc等基于APB1 、APB2或AHB时钟的外设,而这里的存储器包括32自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问的源或者目的。

外部存储设备其自身在这就是外设了,配置时属于外设,不要与配置寄存器的存储设备混淆。
  
<strong>DMA和CPU分时使用内存</strong>
  
三种方法:

• 停止CPU访问内存;
• 周期挪用;
• DMA与CPU交替访问内存。

<font color="#33b1c8">停止CPU访问内存</font>
  
当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传送。

聊聊STM32中DMA模块的使用

judy /

DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。

一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据。。。这样的数据搬运工作将使CPU的负荷显得相当繁重。

严格的说,搬运数据只是CPU的比较不重要的一种工作。CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU还需要负责复杂的中断申请和响应,以保证芯片的实时性能。

理论上常见的控制外设,比如Usart、I2C、SPI甚至是USB等通信接口,单纯的利用CPU进行协议模拟也是可以实现的,比如51单片机经常使用I/O口模拟I2C协议通信。但这样既浪费了CPU的资源,同时实现后的性能表现往往和使用专门的硬件模块实现的效果相差甚远。从这个角度来看,各个外设控制器的存在,无疑降低了CPU的负担,解放了CPU的资源。

【下载】面向USB Type-C™ 和Power Delivery的STM32 Nucleo包

judy /

USB Type-C™和Power Delivery Nucleo pack(P-NUCLEO-USB001)是一种开发套件,由NUCLEO-F072RB板、MB1257扩展板和全功能Type-C线缆组成。这些组成部分与经认证的STM32F0 USB Type-C™ PD中间件堆栈X-CUBE-USB-PD一起,满足了演示USB Type-C™和USB Power Delivery技术功能的需要,方便用户开发其解决方案。

<font color="#0000C6" size="4"><a href="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010228-35283-dm00112…《面向USB Type-C™ 和Power Delivery的STM32 Nucleo包》</a></font>

【下载】[应用笔记]STM32L0xx 硬件开发入门

judy /

本应用笔记为系统开发者们提供了所需的开发板特性硬件实现概述,如供电电源、时钟管理、复位控制、自举模式设置、调试管理。它显示了如何使用 STM32L0xx 产品系列,说明了开发 STM32L0xx 应用所需的最低硬件资源。

本文还包括了详细的参考设计原理图,说明了其主元件、接口和模式。

<font color="#0000C6" size="4"><a href="http://mcu.eetrend.com/files/2018-01/wen_zhang_/100010002-34208-dm00112…《应用笔记:STM32L0xx 硬件开发入门》</a></font>