STM32操作系统系列使用C语言的教程

发布者:RadiantSmile最新更新时间:2024-09-27 来源: elecfans关键字:STM32  操作系统系列  C语言 手机看文章 扫描二维码
随时随地手机看文章

C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言与硬件是紧密连在一起的,结合芯片中的flash和sram,简单了解C语言。

步骤:

  • FLASH,就是存放.bin文件的地方。SRAM,用于存放程序的堆栈,全局变量。

  • MEMORY,用于定义存储器范围。

  • AT>rom,表示将对应的SECTION放置到rom中,即Flash中。

  • _data_start / _data_end,用于说明data段在flash中的位置,方便程序将data段从flash中复制到sram中。

  • _ram_data_start,表示data段将复制到sram中的什么位置。

  • ADDR(),表示获得SECTION的运行地址vma,当程序被下载到flash后,程序开始运行时首先要将data段移动到sram中0x20000400地址处,这样程序运行时才不会出错。

  • LOADADDR(),表示获得SECTION的加载地址lma。

  • SIZEOF(),用于求SECTION的大小

  • 整个SECTIONS,可以看做是程序在flash中的布局,其中.bss不占用flash空间,它是由程序中开始运行时,在sram中开辟空间并初始化为0。

  • 各个SECTION,如.vectors.text.rodata.data.bss,分别存放不同类型的数据。


本质就是C语言中的指针操作,volatile作用是确保本条指令不会因编译器的优化而省略。如代码“RCC_APB2ENR |= 0x00000010;”,表示向寄存器的第4位(从0位开始计数)写1。


关键字:STM32  操作系统系列  C语言 引用地址:STM32操作系统系列使用C语言的教程

上一篇:STM32芯片存储器映射概述
下一篇:教你们STM32如何收发float类型数据

推荐阅读最新更新时间:2026-03-20 12:38

基于STM32从零写操作系统系列---将printf指向串口输出
为什么需要printf? 首先,这个printf不是标准C中的printf,这个printf是自己参考标准库实现的。只是简单地完成了打印输出int,long long int, unsigned int, unsigned long long int, float, double和十六进制数等功能。主要用于在以后的学习中,输出变量、寄存器等的数据,便于调试程序。 1.函数调用中的参数传递 根据《Procedure Call Standard for the ARM ® Architecture》(文章结尾有下载分享)这个文档可知,标准规定在寄存器(r0-r3)和堆栈中传递参数。对于采用少量参数的子程序,仅使用寄存器,大大减少了
[单片机]
基于<font color='red'>STM32</font>从零写<font color='red'>操作系统</font><font color='red'>系列</font>---将printf指向串口输出
基于STM32从零写操作系统系列---熟悉纯windows交叉编译环境
目的: 熟悉在纯windows下的交叉编译环境,了解如何下载BIN格式的程序文件到单片机。 实验2: 一个简单的交叉编译与程序下载过程 环境搭建(以我的平台为例): 安装win7 32位,具体教程可百度 安装make和gcc-arm-none-eabi交叉编译工具,具体教程可百度 安装ST-Link Utility软件 在windows系统上安装编辑器,如notepad++ make,gcc-arm-none-eabi,ST-Link Utility软件已在百度云分享: 链接:https://pan.baidu.com/s/1DlzYMo8oZsnF9ammJuuZoQ 提取码:dc5h 具体实验过程: 1.在w
[单片机]
基于<font color='red'>STM32</font>从零写<font color='red'>操作系统</font><font color='red'>系列</font>---熟悉纯windows交叉编译环境
基于STM32从零写操作系统系列---bootloader
本章主要使用汇编语言编写STM32F103(以下称为“该芯片”)的启动代码。具体结构如图: 启动模式 该芯片可以通过设置BOOT0和BOOT1两个引脚,选择不同的启动方式,正常情况下BOOT0=0,BOOT1=0(0为低电平)。即,芯片将从Flash中加载代码启动。 当芯片上电/复位后,芯片首先从地址0x0000_0000处获取栈地址,然后将地址0x0000_0004处的值赋值给PC寄存器。按照PC寄存器的值,取第一条指令,执行......具体如图: 地址0x0800_0205处的具体代码如图: 简单来说,地址0x0000_0004处存放的是复位处理函数的地址。当上电/复位时,芯片硬件会自动将
[单片机]
基于<font color='red'>STM32</font>从零写<font color='red'>操作系统</font><font color='red'>系列</font>---bootloader
中兴发布了天机A31系列,支持双操作系统
集微网4月21日消息,在近日举办的中兴行业终端渠道合作伙伴大会&新品发布会上,中兴正式发布了行业终端天机A31系列。 据中兴官方介绍,天机A31系列不仅以其独创的三主摄四阵列影像系统,开启了移动影像的第三纪元,还支持双操作系统和独立安全加密芯片,是行业终端的顶级旗舰产品。 除了发布天机A31系列之外,也有中兴高管谈到了对行业终端的看法。 中兴总裁徐子阳指出,中兴致力成为国内行业终端领先品牌。从终端产品角度来说,中兴在底层协议、通讯能力、天线技术等方面,具备其他独立终端品牌不可比拟的先天优势。2021年,中兴将进一步提升政企的战略定位,持续加大资源投入,提升服务行业客户的宽度和深度,为行业客户提供极致、安全的解决方案。同时,抓住
[手机便携]
Keil环境下配置GCC编译器以开发STM32 C语言项目:探讨C语言特性及第23条指南
Keil 配置 GCC 编译器用于 STM32 和 C++23 特性 Keil 配置 GCC 编译器 安装工具链 Arm GNU Toolchain arm-none-eabi 创建Keil工程 前置步骤:获取依赖代码 方式1 使用STM32CubeMX辅助生成 方式2 Github 创建Keil工程 管理工程 添加分组Core/Src 添加分组Core/Startup 添加分组Drivers/STM32F1xx_HAL_Driver 设置GCC工具链(关键) 配置编译目标(重要) 配置编译生成的文件目录 配置C、C++选项 配置汇编选项 配置链接选项 添加函数
[单片机]
Keil环境下配置GCC编译器以开发<font color='red'>STM32</font> <font color='red'>C语言</font>项目:探讨<font color='red'>C语言</font>特性及第23条指南
STM32学习中常见的一些C语言基础知识
C语言是单片机开发中的必备基础知识,本文列举了部分 STM32 学习中比较常见的一些C语言基础知识。 1位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作: 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变 GPIOA 的状态,可以先对寄存器的值进行&清零操作: GPIOA-》CRL &= 0xFFFFFF0F; /* 将第 4~7 位清零 */ 然后再与需要设置的值进行 | 或运算: GPIOA-》CRL ¥=
[单片机]
<font color='red'>STM32</font>学习中常见的一些<font color='red'>C语言</font>基础知识
STM32学习中关于C语言基础知识点
C语言是单片机开发中的必备基础知识,这里就列举部分STM32学习中会遇见的C 语言基础知识点。 01 位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持如下6中位操作: 73bb030a-c64a-11ed-bfe3-dac502259ad0.png 六种位操作 下面我们想着重讲解位操作在单片机开发中的一些实用技巧。 1. 1 在不改变其他位的值的状况下,对某几个位进行设值。 这个场景在单片机开发中经常使用,方法就是先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作: 73c9f4c8-c64a-1
[单片机]
STM32中较为常见的C语言基础知识
C语言是单片机开发中的必备基础知识,本文列举了部分 STM32 学习中比较常见的一些C语言基础知识。 1位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作: 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变 GPIOA 的状态,可以先对寄存器的值进行&清零操作: GPIOA- CRL&=0xFFFFFF0F;/*将第4~7位清零*/ 然后再与需要设置的值进行 |
[单片机]
<font color='red'>STM32</font>中较为常见的<font color='red'>C语言</font>基础知识
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved