![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
文章平均质量分 80
Willliam_william
这个作者很懒,什么都没留下…
展开
-
STM32裸机开发(11) — STM32的异常(基于Keil-MDK)
STM32裸机开发(11) — STM32的异常和中断一、STM32的异常处理机制对于cortex M3/M4来说,CPU每执行完一条指令都会检查有无异常产生,当CPU发现有异常产生时,它就会进行如下处理:保存现场分辨异常/中断,调用对应的异常/中断处理函数恢复现场每个异常/中断对应着一个异常向量,所有的异常向量组成一个异常向量表,对于cortex M3/M4来说,这个异常向量表中放置的就是具体异常/中断的处理函数的地址,当发生异常时,CPU就会从向量表里找到对应的项,从而得到处理函数的地址原创 2021-01-29 21:52:13 · 1427 阅读 · 1 评论 -
STM32裸机开发(10) — 复制data段和清除BSS段
STM32裸机开发(10) — 复制data段和清除BSS段一、什么是BSS段(ZI段)bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。bss是英文Block Started by Symbol的简称。bss段属于静态内存分配。二、为什么要复制data段这是因为对于在STM32F103这类资源紧缺的单片机芯片中,数据段只是暂时先保存在Flash上,在使用前被复制到内存里,而复制到内存这个过程是需要我们自己实现的。三、未处理的结果修改main函数如原创 2021-01-25 22:49:42 · 1479 阅读 · 0 评论 -
STM32裸机开发(9) — 使用链接脚本链接代码
STM32裸机开发(9) — 使用链接脚本链接代码一、链接脚本的作用链接脚本的作用就是用来指定程序的链接方式的,一个程序中包含各种文件,例如start.o、main.o、led.o等,每个文件有包含如代码段、数据段等各种段,而链接脚本的作用就是用来指定各种文件各种段的链接方式。前面我们都没有使用链接文件,只使用了-Ttext参数来指明代码段的链接地址,其他都是按照默认链接的,使用之前曾强调要将start.o文件放在最前面。二、编写链接文件将Makefile中的链接命令改为如下所示$(LD) -g原创 2021-01-24 23:41:59 · 1805 阅读 · 1 评论 -
STM32裸机开发(8) — 在gcc环境下编写uart串口打印程序
STM32裸机开发(8) — 在gcc环境下编写uart串口打印程序一、构建程序目录新建src文件夹,用来存放c源代码新建inc文件夹,用来存放头文件新建build文件夹,用来存放编译输出文件二、编写源文件在src文件夹下新建uart.c文件如下所示#include "uart.h"typedef unsigned int uint32_t;typedef struct{ volatile uint32_t SR; /*!< USART Status register,原创 2021-01-24 16:42:07 · 729 阅读 · 0 评论 -
STM32裸机开发(7) — 复制data段和清除BSS段(ZI段)
STM32裸机开发(7) — 复制data段和清除BSS段(ZI段)一、什么是BSS段(ZI段)bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。bss是英文Block Started by Symbol的简称。bss段属于静态内存分配。而在Keil里,BSS段被称为ZI段二、为什么要复制data段这是因为对于在STM32F103这类资源紧缺的单片机芯片中,数据段只是暂时先保存在Flash上,在使用前被复制到内存里,而复制到内存这个过程是需要我们自己原创 2021-01-24 14:48:17 · 2556 阅读 · 0 评论 -
STM32裸机开发(6) — Keil-MDK下散列文件的分析
STM32裸机开发(6) — Keil-MDK下散列文件的分析一、什么是散列文件我们可以看到,在编译过程中有多个.o文件,而最后生成的只是一个文件,那么这些文件要怎么以什么方式生成一个文件呢?说的专业一点,这个过程就是链接,而在Keil-MDK下就是使用散列文件来指导链接的。如图所示,将【Use Memory Layout from Target Dialog】勾选上然后重新编译,我们就可以在【Objects】目录下得到一个.sct文件如下所示二、散列文件的格式如下所示,一个散列文件由一个或原创 2021-01-22 23:53:57 · 2540 阅读 · 0 评论 -
STM32裸机开发(5) — 在Keil-MDK下编写uart串口打印程序
STM32裸机开发(5) — 在Keil-MDK下编写uart串口打印程序一、构建程序目录新建src文件夹,用来存放c源代码新建inc文件夹,用来存放头文件二、编写源文件在src文件夹下新建uart.c文件如下所示#include "uart.h"typedef unsigned int uint32_t;typedef struct{ volatile uint32_t SR; /*!< USART Status register, Address offset: 0x原创 2021-01-22 22:05:46 · 3038 阅读 · 1 评论 -
STM32裸机开发(4) — 编写C语言点亮LED灯
STM32裸机开发(4) — 编写C语言点亮LED灯一、前言使用c语言时,要用到的一个很重要的就是栈,所以我们要在汇编中就设置好栈;而对于当下的stm32f103来说,我们可以在0x08000000处写入栈顶地址,也可以在汇编程序中使用指令设置SP二、在MDK中实现修改start.s,在0x08000000处写入栈顶地址,如下所示:Stack_Size EQU 0x00000400 ;定义堆栈大小为1024byte AREA STACK, NOINIT,原创 2021-01-02 18:23:59 · 1454 阅读 · 0 评论 -
STM32裸机开发(3) — 使用汇编点亮LED灯
STM32裸机开发(3) — 使用汇编点亮LED灯一、在keil-MDK下编写程序打开keil,新建工程,选择STM32F103ZE新建start.s文件,编写如下代码 PRESERVE8 THUMB; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors原创 2021-01-01 20:19:08 · 2644 阅读 · 5 评论 -
STM32裸机开发(2) — 使用STM32CubeMX点亮第一个LED
STM32裸机开发(2) — 点亮第一个LED一、新建工程使用STM32CubeMX新建一个工程,打开STM32CubeMX,点击创建一个工程点击搜索STM32F103ZE,选中需要的封装,点击开始创建我们可以先将工程保存一下,以免丢失,点击【File】->【Save Project】工程新建好之后会直接进入【Pinout 】选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿原创 2020-12-26 23:22:59 · 1584 阅读 · 0 评论 -
STM32裸机开发(1) — 搭建GCC开发环境
STM32裸机开发(1)— 搭建GCC开发环境一、安装GIT参考:Git&Github使用教程(二) — Git安装和使用二、安装MINGW环境因为mingw的服务器在国外,所以经常安装失败,我们通过安装CodeBlocks的方式来获得MINGW环境下载网址:http://www.codeblocks.org/downloads/26下载好后双击开始安装即可点击安装,然后等待安装完成然后我们将其安装目录下的bin文件夹添加到环境变量里,例如我这里是C:\Program File原创 2020-12-26 00:11:07 · 3762 阅读 · 0 评论 -
STM32MP157裸机学习(1)— 开发环境的搭建
STM32MP157裸机开发(1)— 开发环境的搭建一、前言STM32MP157是2019年ST公司在推出的其第一款集成了Arm Cortex-M4和双核Cortex-A7核心的处理器。而作为使用了STM32好几年的我,目前手上有两款STM32MP157的开发板,分别是Seeed的ODYSSEY–STM32MP157C板卡,还有就是韦东山老师近期推出的MP157嵌入式Linux开发板...原创 2020-11-14 14:00:33 · 5864 阅读 · 1 评论 -
STM32L4的TIMER定时器中断
STM32L4的TIMER定时器中断在上新建工程的基础上添加使用TIMER功能(新建工程见STM32使用LL库建立工程)一、CubeMX的配置使能定时器6即可然后重要的是工程设置里,将HAL改成LL然后便可以生成代码二、用户代码修改将TIM6初始化代码修改为如下,放入新建的timer6.c文件/** * @brief 基本定时器6中断初始化函数 * 定时器溢出时间计算...原创 2020-02-02 21:47:36 · 1803 阅读 · 0 评论 -
STM32L4使用QSPI驱动spiFLASH(W25Q64)
STM32L4使用QSPI驱动spiFLASH(W25Q64)一、什么是QSPIQSPI 即Quad SPI,是一种专用的通讯接口,连接单、双或四(条数据线)SPI FLASH 存储器。简单的来说,QSPI就是为了驱动SPI_FLASH所设计的专用的通信协议,他和标准的SPI协议有很多相似的地方,但是我认为将它看作一种单独的通信协议更好理解。QSPI可以工作在单数据线、双数据线或四条数据线...原创 2020-01-11 18:37:55 · 6261 阅读 · 1 评论 -
STM32L4使用SPI驱动TFTLCD
STM32L4使用SPI驱动TFTLCD在上新建工程的基础上添加使用SPI功能(新建工程见STM32使用LL库建立工程)一、CubeMX的配置1、非SPI的LCD控制IO口的配置查看原理图可以看到,有5个引脚接在了MCU上,其中有两个SPI引脚,三个LCD控制引脚其引脚对照表如下,所以我们先将PC6、PC7、PB15配置为通用IO推挽输出2、SPI的的配置MCU只需要通过SPI向L...原创 2020-01-10 18:38:26 · 3306 阅读 · 0 评论 -
STM32的SPI
一、SPI功能描述SPI的框图如下:SPI通过4个引脚与外部器件相连:MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。SCK:串口时钟,作为主设备的输出,从设备的输入NSS:从设备选择。这是一个用来选择从设备的(可选的)引脚。这个引脚用来作为“片选引脚”,让主设备...原创 2020-01-09 15:27:46 · 1328 阅读 · 0 评论 -
STM32L4使用DMA发送串口数据
在上一个工程的基础上添加使用DMA传输串口数据(上次工程见STM32使用LL库建立工程)一、CubeMX的配置依次点击Configuration->DMA即可进入DMA口详细配置界面。点击【Add】添加DMA传输请求,然后选择USART1_TX请求;其他设置如下即可然后依旧是工程设置里,将HAL改成HAL然后便可以生成代码二、用户代码修改代码生成后打开工程,我们可...原创 2020-01-04 21:46:13 · 3305 阅读 · 0 评论 -
STM32使用LL库建立工程
LL库(Low Layer)是ST最近新增的库,更接近硬件层,直接操作寄存器。其支持所有外设。今天我们通过STM32CubeMX建立一个LL库工程,使用小熊派BearPi开发板,芯片型号为STM32L431RCT6。一、工程建立步骤1、工程初步建立和保存2、配置时钟源(RCC设置)3、GPIO引脚功能设置4、外设初始化配置5、生成工程源码6、编写用户程序二、工程建立1、工程初步建...原创 2020-01-02 16:12:46 · 3501 阅读 · 0 评论