![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32单片机
mybright_
这个作者很懒,什么都没留下…
展开
-
STM32标准外设库
6月份最后一篇技术文章了,记录比较简单的STM32标准外设库。1. 标准外设库概述STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征,该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少开发者开发使用片内外设原创 2017-06-30 16:07:08 · 7683 阅读 · 0 评论 -
STM32的I2C通信
STM32的两个GPIO引脚,分别用于SCL和SDA,按照I2C规约的时序,像控制LED灯那样控制引脚输出,若是接收数据时则读取SDA线上的电平,那就可以实现I2C通信了,这也是我们在51单片机上的“软件模拟协议”做法。但是STM32上还配有I2C控制器片上外设,只要配置好该外设,它就可以依据规约产生通讯信号。收/发数据置于缓存寄存器中,cpu只要检测该外设的状态和数据寄存器就能完成数据收发。但是利原创 2017-08-07 12:49:35 · 35863 阅读 · 3 评论 -
SPI通讯协议介绍
来到SPI通讯协议了。废话两句,“SPI很重要”,这是我在学校时候听那些单片机开发工程师说的。出来实习,到后来工作,确实如此,SPI的使用很常见,那么自然重要咯。 SPI(Serial peripheral interface)即串行外围设备接口,是由Motorola首先在其MC68HCxx系列单片机上定义的,基于高速全双工总线的通讯协议。(又是高速,而且全双工,确实强大)被广泛应用于ADC、LC原创 2017-08-07 18:38:24 · 43786 阅读 · 12 评论 -
基于STM32与NOR FLASH的SPI通信
SPI的通信很容易实现,相比之下,驱动FLASH反而耗费了我学习SPI整个过程的大部分时间。下面是我学习过程的一些记录。硬件平台:秉火ISO_V2开发板实现功能:STM32使用SPI协议读写板载NOR FLASH1. 通讯引脚 SPI通讯需要4个引脚,nSS、SCK、MISO和MOSI, 以STM32的SPI1为例,其关联GPIO如上图标(摘自《STM32中文参考手册_V10.pdf原创 2017-08-10 12:41:33 · 8765 阅读 · 1 评论 -
os_cpu.h
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu.h:1. 全局变量OS_CPU_GLOBALS 和OS_CPU_EXT 允许我们是否使用全局变量。#ifdef OS_CPU_GLOBALS#define OS_CPU_EXT#else#define OS_CPU_EXT extern#endif若没有定义OS_CPU_GLO原创 2017-08-11 18:25:45 · 920 阅读 · 0 评论 -
os_cpu_c.c
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu_c.c:os_cpu_c.c定义了9个钩子(Hook)函数和一个堆栈初始化函数。所谓钩子函数,是那些插入到某些函数中以扩展这些功能的函数,一般钩子函数是为第三方软件开发人员提供的扩充软件功能的入口。为了系统使用者扩展系统功能,uCOS-II中提供很多的钩子函数,使用者可以不修改uCOS-II的源原创 2017-08-12 12:37:58 · 1953 阅读 · 0 评论 -
os_cpu_a.asm
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu_a.asm,这是.asm文件,也就是汇编文件。1. 声明外部变量和导出符号EXTERN OSRunning ; External referencesEXTERN OSPrioCurEXTERN OSPrioHighRdyEXTERN OSTCBCurEXTE原创 2017-08-11 18:49:15 · 3494 阅读 · 2 评论 -
STM32启动文件
1. 开辟栈空间Stack_Size EQU 0x00000400 ; AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_sp开辟大小为0x00000400(1kb)的栈,名为STACK,NOINIT即不初始化,READWRITE表可读可写,ALIGN原创 2017-07-10 18:20:33 · 3621 阅读 · 0 评论 -
基于STM32F429的IAP升级(HAL库/RS485)
最近一周一直在基于STM32F429项目的IAP工程,耗时4天才完成,得空记录下来。文章主要涵盖了以下几点:1. IAP是什么?2. bin文件和hex文件的差别3. ymodem协议介绍及其缺陷4. RS485通讯5. IAP的main()函数代码片段 项目的框架如下: ymodem协议 PC机 -----------------> STM32产品的串口原创 2017-10-28 12:43:43 · 14299 阅读 · 16 评论 -
STM32时钟体系结构
STM32的时钟体系可以直接以图概括(摘自STM32F10X参考手册) 下面就此图做分析1. STM32输入时钟源1.1 时钟源的作用无论是小型单片机还是像STM32这样高级单片机,它们工作的核心都是大规模的时序逻辑电路,而驱动时序逻辑电路的关键则是准确而又稳定的时钟源。它的作用就像小学在操场上做广播体操时候播放的背景音乐,用于协调和同步各单元运行,为时序电路提供基本的脉冲信号。1.2 STM原创 2017-06-20 08:36:51 · 22884 阅读 · 0 评论 -
串口通讯介绍
串口通讯的物理连接和传输协议,是学习单片机串口编程的基础。 本文参照《深入浅出玩转51单片机》和《零死角玩转STM》书籍,对通讯以及串口一些基本概念做了详解。1. 串口通讯的基本概念1.1 基本方式基本方式分并行通讯和串行通讯 1.1.1 并行通讯 并行通讯是指数据的每一位同时在多根数据线上发送或者接收。 其特点是各数据位同时传送,速度快、效率高,有多少数据位就需要多少根数据线,传送成本原创 2017-07-17 15:44:02 · 8802 阅读 · 1 评论 -
I2C通讯协议介绍
I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线。具有引脚少,硬件实现简单,可扩展性强的优点。I2C总线的另一优点是支持多主控,总线上任何能够进行发送/接收数据的设备都可以占领总线。当然,任意时间点上只能存在一个主控。 I2C即是一种总线,也是一种通讯协议。在嵌入式开发中,通讯协议可分为两层:物理层和协议层。物理层是数据在物理媒介传输的保障;协议层主要是规定通讯逻辑,同一收发双方的原创 2017-08-01 12:45:35 · 28555 阅读 · 3 评论 -
STM32标准外设库函数SetSysClockTo72(void)
在http://blog.csdn.net/qq_29344757/article/details/73479924文章中介绍了STM32的时钟体系,现在以STM32标准外设库SetSysClockTo72()函数为例,介绍关于RCC的编程。有了前面文章的基础,学习RCC已经不再那么艰难枯燥了,至少我是这么觉得的。SetSysClockTo72(void)函数是我们使用外设库时默认的系统时钟设置函数原创 2017-07-10 18:35:54 · 5506 阅读 · 0 评论 -
STM32的中断和事件
学习单片机一贯的套路,搞完时钟和GPIO就要折腾中断了。1. 中断和异常的区别1.1 中断是指系统停止当前正在运行的程序转而其他服务,可能是程序接收了比自身高优先级的请求,或者是人为设置中断,中断是属于正常现象。 1.2 异常是指由于cpu本身故障、程序故障或者请求服务等引起的错误,异常属于不正常现象。Cortex-M3内核总共支持256个中断,其中包含16个内核异常和240个外部中断,但是各个芯原创 2017-07-12 18:53:36 · 11761 阅读 · 2 评论 -
STM32系统定时器SysTick
1. SysTick系统定时器概述学习完STM32的中断,下来就要学习STM32的定时器。就像电话最基本的功能是与人通话一样,定时器最基本的功能就是定时了(STM32有些定时器的功能超乎想象,当然不是今天要学的SysTick),定时器的使用步骤无非就是设置定时时间,然后等待超时,超时会触发中断或者设置某个标志位:若是触发中断自然要去执行中断处理函数,处理函数和中断源的绑定工作在启动文件的中断向量表已原创 2017-07-13 18:46:36 · 13939 阅读 · 0 评论 -
STM32基本定时器TIM6和TIM7
1. STM32上定时器的分类前面学习了STM32系统定时器SysTick,它的主要作用是为OS提供系统滴答,当然我们也可以利用它实现了精准延时。在STM32单片机中,除了属于CM3内核中的一个外设的系统定时器外,还有几个属于片上外设的定时器:基本定时器(TIM6和TIM7)、通用定时器(TIM2/3/4/5)和高级定时器(TIM1和TIM8)。强调,这里指的是除互联型的STM32F1系列单片机。原创 2017-07-14 18:09:13 · 13748 阅读 · 4 评论 -
STM32的GPIO内部结构及相关寄存器
学完大二上学期51单片机课程的寒假,在家我就开始捣鼓STM32了,记得那时候接触STM32感觉它很难,20多天下来就学习了RCC时钟体系和GPIO控制模块,开学后又开始忙一些有的没的,STM32的学习也搁置了,以至于后来跟学校当是在念博的老师交流时,我是这样描述我的STM32开发水平的:“我只会用GPIO写流水灯程序”,说来汗颜。最近一阵子又回归STM32学习之旅,对于GPIO模块其实很不想写文章,原创 2017-07-08 14:43:05 · 5907 阅读 · 2 评论 -
STM32直接存储器访问DMA
第一次接触DMA是在学校学习ARM9裸板程序的时候,想起来都时隔快2年了。现在来看看STM32平台的DMA,一样,在标准外设库的支持下,STM32的DMA编程十分简单,但是既是学习,那还是花点时间看看DMA的相关概念及原理的了解下。1. DMA简介DMA是Direct Memory Access的简称,是直接存储器访问的意思。DMA是STM32单片机的外设之一,主要功能是用来搬移数据的。通过DMA搬原创 2017-07-22 16:05:41 · 3723 阅读 · 0 评论 -
STM32的位段操作
位操作就是可以读/写单独的一个比特位,在STM32中没有像51单片机的sbit来实行位定义,但是它可以通过位带别名区来实现。 在STM32中有两个地方实现了位带操作,一个是SRAM区的最低1MB空间,另一个是外设区最低1MB空间。0x2000 0000 ~ 0x200f ffff (SRAM区中的最低1MB)0x4000 0000 ~ 0x400f ffff (片上外设区中的最低1MB,已覆盖了原创 2017-06-19 11:14:31 · 7628 阅读 · 0 评论 -
STM32的printf函数重定向
在前面学习了STM32的串口编程,通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据,接下来我们可以实现STM32工程上的printf()函数了,方便用于程序开发中调试信息的打印。1. 法1:使用MicroLIB库1.1 KEIL-MDK中的Use MicroLIB选项在MDK开发环境中, MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使原创 2017-07-19 12:21:54 · 58245 阅读 · 0 评论 -
STM32串口USART通讯
1. USART和UARTUSART(Universal Synchronous Asynchronous Receiver and Transmitter)即通用同步异步收发器,它是一个串行通信设备,与外部设备可灵活进行全双工数据交换。在这之前我们常用到的是UART(Universal Asynchronous Receiver and Transmitter),它是在USART基础上裁剪掉了同步原创 2017-07-18 19:06:53 · 10519 阅读 · 0 评论 -
哈佛和冯诺依曼,从STM32的const全局变量说起
从在学校到后来的实习工作,讲真,对于处理器的冯诺依曼结构和哈佛结构不大在意,印象中只知道它是数据存储器和程序存储器相关。 昨天在STM32程序中,把全局变量的定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇怪,程序不都必须在RAM中运行?即使在静态常量区不也应该放在SRAM中? 原因?这得从处理器的冯诺依曼和哈佛结构说起了。原创 2017-07-22 13:22:01 · 9145 阅读 · 6 评论