精华内容
下载资源
问答
  • 单片机STM32芯片手册

    2018-10-30 21:57:02
    较为详细地介绍了单片机STM32的使用方法,由浅入深,适合广大的电子设计爱好者与刚刚入门单片机的新手
  • 野火stm32教程

    2019-03-06 22:04:28
    STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB...
  • STM32视频学习教程视频' 49集5.6G(包括原理图,源代码) 下载后是百度网盘下载链接去下载的,无需担心链接会失效,失效了里面也有联系方式可以找我重新发下载的
  • stm32教程-初级篇.pdf

    2019-07-04 07:51:34
    stm32的学习,stm32教程
  • STM32单片机现已火遍大江南北,各种教程资料也是遍布各大网站论坛,可谓一抓一大把,但大部分都差不多。今天总结了几篇电路城上关于STM32的制作,不能说每篇都是经典,但都是在其他地方找不到的,很有学习参考意义的...
  • STM32新手入门教程

    万次阅读 多人点赞 2020-11-24 09:53:38
    简介参考自:小马哥STM32四轴学习平台–DragonFly四轴STM32单片机软件入门级飞控算法课程 单片微型计算机简称单片机(MCU(MicrbControl Unit)),我们自己的个人计算机中,CPU、RAM、ROM、I/O这些都是单独的芯片,...

    STM32简介

    简介参考自:小马哥STM32四轴学习平台–DragonFly四轴STM32单片机软件入门级飞控算法课程

    单片微型计算机简称单片机(MCU(MicrbControl Unit)),我们自己的个人计算机中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机只是将这所有的集中在了一个芯片上而已。单片机又有8位的如51单片机、16位的如MSP430、32位的如STM32,通常我们说的多少位通常指的是内核(CPU)一次处理的数据宽度。也就是说内核一次处理的位数越多单片机的计算速度就越快,性能也就越强悍。

    STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而出。

    STM32芯片内部可以粗略划分两部分:内核+片上外设。如果与电脑类比,内核与片上外设就如同电脑的CPU与主板、内存、显卡、硬盘的关系。
    ARM公司只设计内核不生产芯片,他会将有关内核的技术授权给各半导体厂商例如ST、TI、Atme1、NXP等厂商。这些厂商都是基于这个内核自己设计片上外设如SRAM、ROM、FLASH、USART、GPIO等,然后集成到一个硅片上,这就是我们现在用的芯片。
    芯片内部架构见图:

    image-20201123192912952

    芯片内部内核和外设分别是两个公司设计的,那他们该怎么联系到一起协同高效的工作呢?答案就是总线,学过计算机组成原理的同学都应该知道计算机五大组成部分运算器、控制器、存储器、输入设备、输出设备他们之间的通信就是通过总线。我们上面也说了单片机就是一个集成在硅片上的计算机,所以他内部的连接关系也是靠总线。
    STM32内部一共有11条总线:

    image-20201123194739287

    我们知道,在嵌入式开发中,比如51和Arduino,我们写程序烧入芯片就可以实现控制。那么我们写的程序怎么就能控制我们的单片机工作呢或者程序在控制什么东西呢?
    那个东西就是寄存器,其实不管我们用库开发还是寄存器开发我们本质上就是在控制寄存器上的每个位的通断,并且这些寄存器都有其特定的功能。换句话说每个外设(如GPI0、USART、I2C、SPI.…)都对应有寄存器来对他控制。

    所以STM32可以用寄存器开发也可以用库开发

    STM的选型

    STM32是ST的所有产品的统称,ST有两大家族STM8和STM32。STM8主要针对于低成本,对主频要求比较低、运算速度要求不是很高的低端市场。STM32主要应用于项目对主频要求较高、运算速度比较快、实时性好的中高端市场。STM32有很多产品大致划分可分为主流MCU、高性能MCU、低功耗MCU。其中主流MCU如STM32F1系列、高性能MCU如STM32F4、STM32F7系列、低功耗MCU如STM32L0系列。并且每个系列产品下面还会根据闪存容量、外设数量、封装大小分为很多种类并且价格也是差别很大。

    image-20201123193713582

    STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

    1STM32STM32代表ARM Cortex-M内核的32位微控制器。
    2FF代表芯片子系列。
    3103103代表增强型系列。
    4RR这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,I代表176脚。
    5BB这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。
    6TT这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。
    766这一项代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。

    我手上是一款德飞莱尼莫M3S V2.3开发板

    (德飞莱)尼莫M3S串口驱动安装及下载程序使用说明书

    用的是STM32F103ZET6,芯片说明书如下:

    微信截图_20201120172445

    之后还购置了一款最小系统板,搭载STM32103C8T6

    image-20201123201356072

    编写程序

    先下载keil软件(官网下载MDK5的安装包):

    微信截图_20201120175054

    注意:

    微信截图_20201120175054

    所以要开发C51就得下载C51的Keil要开发STM32就得下载MDK-Arm

    如果要设置C51和STM32的开发环境,一般需要准备如下文件:

    微信截图_20201120175054

    资源链接: 百度网盘密码:d1cs

    安装可以参考这个:STM32开发环境搭建(Keil)

    MDK5安装破解以及安装stm32与C51支持包(附安装包)

    其中pack文件是STM32的芯片包,可以在安装完keil后下载(KEIL公司的软件包托管网站)双击安装,也可以去keil的pack Installer安装。

    Keil安装

    选择安装路径时包括选择MDK核心组件(Core)的安装路径和外设包(Pack)的安装路径,一般只用选择 Core 的安装路径,Pack 的路径会自动设置为 Core 路径下的ARM/PACK

    安装完成后,会自动弹出 Pack Installer 界面,如果没有的话可以打开安装好的 Keil uVision5 软件,在工具栏上找到 Pack Installer 的图标,然后点击进入:

    mdk5_pack_installer

    由于我们使用的STM32型号为 STM32F103ZET6,还需要安装开发所需要的器件支持包(Device Family Pack, i.e. DFP),所以展开STM系列产品的菜单栏,找到芯片设备,点击左边Packs中的三个组件,Pack Installer 会自动从网上下载最新版本的组件,下载进度在 Pack Installer 底部状态栏显示。(由于我已经通过双击安装好了,所以是Up to date)

    image-20201123165751452

    直接用Keil5新建工程(只能用Keil5快速新建工程)。

    Project-> New,之后选择自己的开发板芯片:

    image-20201123172441979

    确定之后又跳到运行环境的界面:

    image-20201123181848042

    必选CMSIS的Core还有Device的Startup

    如果要连接外设必须勾选外设的时钟RCC,一般再勾选上FrameworkGPIO、和USART串口。

    点击OK确定创建项目。项目创建完成后就是这样的:

    image-20201123182513726

    可以看到已经包含了我们选择的库文件。如果还需要什么可以再点击图上的按钮再次打开运行环境配置页面。

    image-20201123182326097

    之后可以管理一下项目目录,自定义一下名字。

    image-20201123183231495

    然后添加main.c文件:

    image-20201123183211905

    之后就可以在main文件中写代码了。

    image-20201123183738651

    写完可以编译一下,如果输出正确就表示环境配置没问题。

    image-20201123184915044

    这里默认是不会创建Hex文件的,所以还需要进入设置里面去设置一下。

    image-20201123183932143

    之后再编译就可以在Objects文件夹下面看到Hex文件。

    image-20201123185140948

    烧写程序

    1. USB转串口烧写

    参考这个:如何使用串口来给STM32下载程序

    不过具体还得看官方的开发板说明书。

    1. ST-Link烧写

      STM32 ST-LINK Utility介绍、下载、安装、使用方法

    STLink 上 LED 指示灯用于提示当前的工作状态,具体情况如下:

    • LED 闪烁红色:STLink 已经连接至计算机。
    • LED 保持红色:计算机已经成功与 STLink 建立通信连接。
    • LED 交替闪烁红色绿色:数据正在传输。
    • LED 保持绿色:最后一次通信是成功的。
    • LED 为橘黄色:最后一次通信失败。

    说白了就是3步:

    1.连接芯片:

    Tarage -> connect或直接点击连接快捷按钮:

    20160920161759141

    2.打开程序

    打开hex文件可以从菜单栏(File -> Open File)打开,也可以直接讲hex文件拖动到FLASH区域:

    20160920161809181

    3.下载程序

    点击“下载”(可以Taraget -> Program,也可以直接点击下载快捷按钮,如下图):

    20160920161820947

    弹出信息确认窗口,如hex文件路径、验证方式等,确认信息无误后点击“Start”开始下载程序。

    image-20201123190055806

    出现“Verification…OK”,说明下载成功。

    点亮LED灯

    GPIO简介

    参考自:【STM32开发】STM32 GPIO配置

    GPI0是通用输入输出端口的简称,从名字上也可看出GPIO最基本的功能就输入和输出。它也是芯片内部与外部电路连接的唯一的接口,换句话说只要我们使用片上外设几乎都会与GPIO打交道。
    GPI0基本功能是输入和输出,但是STM32本身就是一个很复杂的系统,内部外设繁多,那么GPIO的基本功能是肯定满足不了这么多外设的需求,芯片厂商为了解决此问题,将GPI0分为八种模式(输入4种+输出4种)。八种模式分别为:

    1. 输入浮空 GPIO_Mode_IN_FLOATING

    2. 输入上拉 GPIO_Mode_IPU

    3. 输入下拉 GPIO_Mode_IPD

    4. 模拟输入 GPIO_Mode_AIN

    5. 具有上拉或下拉功能的开漏输出 GPIO_Mode_Out_OD

    6. 具有上拉或下拉功能的推挽输出 GPIO_Mode_Out_PP

    7. 具有上拉或下拉功能的复用功能推挽 GPIO_Mode_AF_PP

    8. 具有上拉或下拉功能的复用功能开漏 GPIO_Mode_AF_OD

    我的STM32开发板板载两个LED小灯,电路图如下:

    image-20201123204842471

    GPIO配置

    由于STM32的GPIO工作模式有8种,所以在GPIO输出之前要先对要操作的GPIO进行配置:

    • 定义GPIO的初始化结构体类型

    • 使能GPIO的时钟

    • 配置GPIO的引脚

    • 配置GPIO口的输出类型为推挽

    • 配置GPIO口的输出速度

    • 初始化GPIO(初始化相应的寄存器)

    GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
    //打开PB口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    //打开PE口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    //PB5,PE5引脚设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    //设置输出速率50MHz
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //推挽输出模式
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    //初始化外设GPIOx寄存器
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_Init(GPIOE, &GPIO_InitStructure);
    

    解释:

    1.定义GPIO的初始化类型结构体:

    GPIO_InitTypeDef GPIO_InitStructure;
    

    此结构体的定义是在stm32f10x_gpio.h文件中,其中包括3个成员。

    typedef struct
    {
      uint16_t GPIO_Pin;       
      GPIOSpeed_TypeDef GPIO_Speed;  
      GPIOMode_TypeDef GPIO_Mode;   
    }GPIO_InitTypeDef;
    

    (1)uint16_t GPIO_Pin;来指定GPIO的哪个或哪些引脚,取值参见stm32f10x_gpio.h头文件的宏定义。

    (2)GPIOSpeed_TypeDef GPIO_Speed;GPIO的速度配置,此项的取值参见stm32f10x_gpio.h头文件GPIOSpeed_TypeDef枚举的定义,其中对应3个速度:10MHz、2MHz、50MHz;

    (3)GPIOMode_TypeDef GPIO_Mode;为GPIO的工作模式配置,其取值参见stm32f10x_gpio头文件GPIOMode_TypeDef枚举的定义,即GPIO的8种工作模式。

    2.使能GPIO时钟

    ARM与C51单片机不同的是,不用外设的时候,如IO口、ADC、定时器等等,都是禁止时钟的,以达到节能的目的,只有要用到的外设,才开启它的时钟。

    void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
    

    此函数是在stm32f10x_rcc.c文件中定义的。其中第一个参数指要打开哪一组GPIO的时钟,取值参见stm32f10x_rcc.h文件中的宏定义,第二个参数为打开或关闭使能,取值参见stm32f10x.h文件中的定义,其中ENABLE代表开启使能,DISABLE代表关闭使能。

    3.设置GPIO_InitTypeDef结构体三个成员的值

    这里包括引脚、速度和工作模式,取值可参考第一部分。

    4.初始化GPIO

    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*  GPIO_InitStruct);
    

    函数配置GPIO,此函数是在stm32f10x_gpio.c文件中定义的,其中第一个参数代表要配置哪组GPIO,取值参见stm32f10x.h文件中的定义,第二个参数是第1步定义的GPIO的初始化类型结构体。

    GPIO电平输出

    官方让GPIO输出高低电平的函数:

    GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    

    函数就是置位GPIO,即让相应的GPIO输出高电平;

    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
    

    函数是让GPIO复位的,即让相应的GPIO输出低电平。

    程序编写

    # include "stm32f10x.h"
    
    #define LED3_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
    #define LED3_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
    
    void LED_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
        //打开PB口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        //PB5引脚设置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        //端口速度
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //端口模式,此为输出推挽模式
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //初始化对应的端口
        GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    int main()
    {
        LED_Init();
        while(1)
        {
            LED3_ON;
        }
    }
    
    

    闪烁LED灯

    这个实验室做的两个led流水灯。

    程序编写

    首先新建一个文件夹MY

    在该文件夹下新建一个led.h头文件:

    #ifndef __LED_H
    #define __LED_H
    
    #include "stm32f10x.h"
    
    #define LED2_OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)
    #define LED2_ON GPIO_ResetBits(GPIOE,GPIO_Pin_5)
    #define LED2_REV GPIO_WriteBit(GPIOE, GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5))))
    
    #define LED3_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
    #define LED3_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
    #define LED3_REV GPIO_WriteBit(GPIOB, GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))))
    
    void LED_Init(void);
    
    #endif
    
    

    之后新建一个led.c文件:

    #include "led.h"
    
    void LED_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
        //打开PB口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        //打开PE口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
        //PB5,PE5引脚设置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        //端口速度
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //端口模式,此为输出推挽模式
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //初始化对应的端口
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_Init(GPIOE, &GPIO_InitStructure);
    }
    
    

    最后编写main文件:

    # include "stm32f10x.h"
    # include "led.h"
    
    int main()
    {
        uint32_t i; 
        LED_Init(); //初始化LED
    
        LED2_ON;
        LED3_OFF;
        for(i=0; i<0xffffff; i++); //for循环不精确延时
        while(1)
        {
            for(i=0; i<0xfffff; i++); //for循环不精确延时
            LED2_REV;//LED2取反
            LED3_REV;//LED3取反
        }
    }
    
    

    结构目录如图:

    微信截图_20201124091425

    .h文件默认是不显示的。编译通过后,在左侧的.C文件上会出现一个“+”号,点开就是该C文件使用到的h文件。

    实验结果

    GIF-min
    展开全文
  • STM32单片机的例程、硬件接口资料
  • 学习STM32单片机,从菜鸟到牛人就是这样简单

    万次阅读 多人点赞 2017-11-29 11:09:34
    我想说,为了学习单片机而去学习单片机的思路不对。  你问,如何系统地入门学习stm32?  本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。  你要考虑的是, 我可以...

      我想说,为了学习单片机而去学习单片机的思路不对。

      你问,如何系统地入门学习stm32?

      本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。

      你要考虑的是, 我可以用STM32实现什么?

      为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多?


      当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等。。。

      从菜鸟到牛人的学习步骤

      我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。

      英文好的同学,请不要以为你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,建议看英文原版还是有好处的。stm32学习交流群:197416462  欢迎加群

      STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。翻译了大量的英文文档,迎合了国内的很多工程师的思维。

      学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。这是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。

      阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。

      后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。比如在使用AD的时候,就需要去阅读第10章ADC。其他不举例。相信每个初学者都有自己的研究方向和判断。

      阅读《STM32固件库使用手册》,主要是为了简化编程。STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。当然,我们也可以不去碰这些固件库——传说使用它会使得代码效率变低,是有道理的。网络上也出现了很多网友自己写的代码,没有使用带固件库函数。如何取舍,在于您的选择。

      这里我主要强调的是,阅读《STM32固件库使用手册》的时候,前面几章也是必须阅读的。比如第一章文档和库规范中的命名规则,编码规则,这些都是需要注意的。第二章是最关键的,希望大家熟读。第二章描述了固件库的架构,我们如何去使用固件库的步骤等。有了第二章的基础,我们就可以借助固件库写出自己的代码了。第四章开始之后,就可以根据大家的需要来阅读。实际上,后续的章节,都是描述某个模块有什么什么函数,每个函数如何使用等。

      关于后面的章节,建议对GPIO库函数、中断部分库函数、复位和时钟设置的库函数要比较熟悉,因为平时经常会用到。

      以上提到的这两个文档,已经足够您看的了,呵呵。希望您能从中获取大量的STM32基础知识。

      设定一个不错的两周入门计划

      (1)这里所谓的“入门”,指的是能理解并掌握一些常用的STM32外设,真正想掌握一款处理器,两周根本说明不了什么问题。只能说,你已经有所了解了。但是,这对我们初学者来说已经足够了。

      (2)这里所谓的“两周”,根据每个人的时间安排不同而不同。

      如果您每天有充足的时间学习,那么可以规定自己尽快地能独立地进行简单的STM32开发。

      如果您每天只有业余时间来学习STM32,建议根据您的具体情况安排时间。毕竟计划时间如果安排太紧,反而收不到良好的效果,只能进入恶性循环,这是我们要避免的。

      但是建议,不管您有无充足的时间,都必须给自己做一个计划!!


      我这里列出一个思路,仅供参考。

      步骤一,安装完STM32学习的软件,比如J-Link、Keilfor ARM(MDK)、ISP(如果需要从串口下载的话)。这些软件安装的详细步骤,可以参考我们推出的相应教程进行。

      步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个LED灯的闪烁情况。这部分的操作,可以参考我们推出的相应的教程进行。

      实际上,以上两个步骤,是为了熟悉要使用的工具软件而已。属于找感觉的阶段。其实我们还没开始STM32的学习呢!

      步骤三,准备几个常用的文档,比如《STM32的用户手册》,《STM32固件库使用手册》等文档。用于平时查阅。这些文档,在光盘中的芯片手册目录中均可找到。

      步骤四,开始查看例程的编写,看看例程是如何写的,自己可否修改下例程,达到自己想要的效果呢?

      步骤五,Ucos-II的移植,是否需要试一下?

      恭喜你,至此,你已经可以自如进行独立的开发了。最后一步,给自己一个目标(项目),把它实现出来!

      再次强调,以上只是一个学习STM32的思路,供大家参考。下面列出了前面关键的步骤,希望大家能尽快入门。

      第1步:熟悉调试软件

      对初学者来说,我们至少需要安装两个软件:J-Link驱动软件、MDK(就是原来的Keil)软件。

      这两个软件在安装软件的过程可以查看神舟开发板用户手册,这里不再重复,大家可以参考我们推出的教程《如何安装J-Link驱动软件》以及《如何安装MDK(Keil)软件》。如何验证自己已经熟悉调试软件的操作了呢?很简单,神舟STM32开发板光盘里附带了很多HEX格式的文件,可以选择一些HEX文件,来观察运行结果。

      该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。

      第2步:GPIO编程

      这是第一次接触固件库的编程,一定要硬着头皮去了解固件库。建议大家尽量去用固件库。而不是避开固件库自己写代码——这样只能在学习中才会发生。实际的项目中,代码成百上千个,如何一个一个自己写?调用固件库中的函数来完成,才是王者之道。

      GPIO本身的编程实际上很简单:

      1、设置GPIO口的引脚为输入或者输出模式。我们在进行点灯代码的时候,一般设置为推挽输出模式。

      2、操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。

      3、实现多种花样的LED闪动,使得自己熟悉GPIO的编程过程。

      该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。

      第3步:开始全新的STM32深入研究

      经过以上调试软件的熟悉和GPIO口的编程调试后,相信您已经对STM32有一定的了解。

      至少知道如何利用STM32的固件库去写一个代码。在这个阶段,将要接触到串口编程、TFT液晶屏驱动编程、定时器编程、串行外设接口SPI编程、存储器编程、SD卡与文件系统移植、USB读写、UCOS移植等,有精力还可以研究其他外设。

    创客学院官网:www.makeru.com.cn   stm32学习群:197416462


    展开全文
  • STM32野火版教程全集

    热门讨论 2014-04-12 10:37:32
    STM32野火版开发教程全集:包括,零死角玩转STM32初级版,中级版,高级版和系统篇,是学习STM32的神器。
  • 根据ARM的统计,2010年全部Cortex-MMCU出货量为1.44亿片,2008年~2011年第一季度,STM32累计出货量占Cortex-MMCU出货量的45%。也就是说,两个Cortex-M微控制器中有一个就来自ST。”很多市场分析机构也ARM的强劲增长...
  • 一天入门STM32

    2018-03-16 00:20:48
    stm32入门指南。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • STM32视频教程

    2018-01-05 10:25:38
    STM32RAM系列单片机学习视频教程,是广大嵌入式技术人员的学习教程
  • stm32单片机入门教程

    2010-10-20 16:29:56
    非常好的入门教程,语言非常的平实,我通过这份资料几天就把stm32的模块调了一遍
  • STM32单片机的编程也是一样的,虽然支持汇编,但基本上没有人用,STM32程序都是基于C语言编程的。 编程序代码可读性差,不方便移植,所以逐步的被淘汰,单片机目前基本上都是支持C语言程序编程。 如何学习STM32...

    在大学刚开始接触51单片机的时候,我们学习的都是汇编指令,再到后来学习了C语言,用C语言代替汇编指令来开发编程单片机。

    STM32单片机的编程也是一样的,虽然支持汇编,但基本上没有人用,STM32程序都是基于C语言编程的。

    编程序代码可读性差,不方便移植,所以逐步的被淘汰,单片机目前基本上都是支持C语言程序编程。

    如何学习STM32单片机开发?

    1. 选择一款合适的开发板

    想学好单片机,我们拥有一个开发板是必不可少的,单片机开发学习最要紧的就是要实操,配套开发板学习,很多程序代码通过开发板来验证,才能找到程序编程的感觉和兴趣。

    STM32单片机,我们推荐大家选择从STM32F103开始学习,性价比高,应用比较广。

    当然,我更倾向于通过项目去学习STM32,通过项目可以一步到位,如果通过开发板学习,你会发下,学完以后还是不知道怎么做项目。

    无际单片机编程提供的STM32实战项目学习,通过项目实战学习单片机开发可以帮助大家更高效的学习并掌握单片机编程开发。

    2.搭建开发环境

    STM32单片机开发学习的第一件事情,就是要搭建单片机的开发环境。

    STM32单片机最常用的开发环境有Keil和IAR,两个各有优势,目前选择使用Keil的人更多一点,所以Keil更通用,也推荐大家使用Keil软件。

    Keil软件有多个版本,包括Keil C51,KeilMDK等,STM32单片机需要安装KeilMDK版本,正式版本是需要收费的,如果大家是学习,大家可以在网上搜索Keil注册机破解。

    除了安装Keil,还需要下载并安装STM32F10x_StdPeriph_Lib_V3.5.0,STM32单片机编程用到的库文件都来自这个文件。

    关于软件的安装,在这里就给大家不介绍了,网上有大把的资料。

    搭建好Keil开发环境之后,还需要掌握STM32单片机的烧录。

    关于STM32单片机程序的烧录有三种方式:分别是ST-Link,J-Link和ISP(串口下载.)

    如果是长时间开发使用,建议大家选择ST-Link,ST-Link不仅可以下载程序,也可以方便大家调试仿真,使用非常方便。

    ST-Link烧录工具,某宝上大把,我们可以选择价格比较合适的购买即可,不过一般开发板都会自带ST-Link烧录工具,不需要大家重新购买。

    3.收集开发资料

    “STM32 参考手册”、“Cortex-M3 权威指南”、“STM32 不完全手册-库函数版本”这三个资料是STM32单片机最官方,最权威的资料,而且以上的资料都是有中文版本的。 大家在初学阶段,要学会参看和利用这些资料。

    这些资料网上大把的,大家百度直接可以下载就可以了,少啰嗦,我们直接开始动手学习STM32单片机,直接在开发板上实战学习STM32单片机的实验。

    4.动手开始学习STM32单片机

    学习板一般会带配套的学习教程,我们跟着开发板的教程学习就可以。

    刚开始学习的时候做的第一个实验就是点亮第一个LED灯,这个小实验的代码量比较小,也可以让大家动手实现单片机编程,并达到实验效果的感觉还是特别激动的。

    单片机的学习碰到问题如果不能解决,容易产生枯燥,烦躁,不耐烦的情绪,大家一定要多点耐心,学习一定是通过我们不断努力积累的。

    5.掌握调试技巧

    刚开始敲代码实战的时候,编译经常会出现很多错误和警号,我们要学会处理这些警号和错误的能力。

    处理程序编译的时候提示错误和警号是STM32单片机程序编程必须要掌握的技能之一,最常用的方法有:

    ①双击编译提示的错误语句,程序会自动的跳转到错误处,然后再跳转的地方的前后查找问题

    ②刚开始写代码,最常见的错误包括:大括号不对应,语句的后面忘记写分号,分号写成了中文格式,函数未声明,变量未定义等。

    ③对于一些不能处理的警号或错误,可以复制错误提示,然后百度,大多数的错误都可以通过这个方法处理

    有时候我们写的代码,没有错误和警号,但就是不能实现功能,这个时候我们就需要通过单片机的仿真功能来寻找代码的问题。

    成为高手,就是不断看,不断改,然后再自己重写的过程。

    展开全文
  • STM32快速入门教学视频,手把手教你学STM32,从简单的GPIO开始,一步步的详细视频教程
  • STM32 学习笔记从51 开始,单片机玩了很长时间了,有51,PIC,AVR 等等,早就想跟潮流玩玩ARM ,但一直没有开始,原因不知道玩了ARM 可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3 出来了...

    STM32 学习笔记

    从51 开始,单片机玩了很长时间了,有51,PIC,AVR 等等,早就想跟潮

    流玩玩ARM ,但一直没有开始,原因不知道玩了ARM 可以做什么(对我自

    己而言)。如果为学习而学习,肯定学不好。然后cortex-m3 出来了,据说,这

    东西可以替代单片机,于是马上开始关注。也在第一时间开始学习,可惜一开始

    就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大

    街都是,随便哪里都可以买得到,但我选的第一种显然做不到。为此,大概浪费

    了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。

    这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感

    悟式的,甚至有时会是错误的,有些做法会是不专业的。那么,为什么我还要写

    呢?这是一个有趣的问题,它甚至涉及到博客为什么要存在的问题。显然,博客

    里面的写的东西,其正确性、权威性大多没法和书比,可为什么博客会存在呢?

    理由很多,我非专家,只说我的感慨。

    我们读武侠小说,总会有一些创出独门功夫的宗师,功夫极高,然后他的弟

    子则基本上无法超越他。我在想,这位宗师在创造他自己的独门功夫时,必然会

    有很多的次的曲折、弯路、甚至失败,会浪费他的很多时间,而他教给弟子时,

    则已去掉了这些曲折和弯路,当然更不会把失败教给弟子,按理说,效率应该更

    高,可是没用,弟子大都不如师。为什么呢?也许知识本身并不是最重要的,获

    取知识的过程才是最重要的?也许所谓的知识,并不仅仅是一条条的结论,而是

    附带着很多说不清道不明的东西?如植物的根,一条主根上必带有大量的小小的

    触须?

    闲话多了些,就权当前言了。下面准备开始。

    一、条件的准备

    我的习惯,第一步是先搭建一个学习的平台。原来学51,PIC,AVR 时,都

    是想方设法自己做些工具,实验板之类,现在人懒了,直接购买成品了。

    硬件电路板:火牛板

    软件:有keil 和iar 可供选择。网上的口水仗不少,我选keil,理由很简单,

    这个我熟。目前要学的知识中,软、硬件我都不熟,所以找一个我有点熟的东西

    就很重要。在我相当熟练之前,肯定不会用到IAR,如果真的有一天不得不用I

    AR ,相信学起来也很容易,因为这个时候硬件部分我肯定很熟了,再加上有ke

    il 的基础,所以应该很容易学会了。

    调试工具:JLINK V8 。这个不多说了,价格便宜又好用,就是它了。

    二、热身

    网上选购的,付了款就是等了。拿到包裹,端详良久,起身。。。。沐浴,

    更衣,焚香,,,

    总得先吃晚饭,洗澡,再点个电蚊香什么的吧。

    ,拆包

    细细端详,做工精良,尤其那上面的3.2 吋屏,越看越喜欢。接下来就是一阵折

    腾了,装JLINK 软件,给板子通电,先试试JLINK 能不能与电脑和板子通信上

    了。真顺,一点问题也没有。于是准备将附带的程序一个一个地写进去试一试。

    一检查,大部分例子的HEX 文件并没有给出,这要下一步自己生成,但是几个

    大工程的例子都有HEX 文件,如MP3,如UCCGI 测试等,写完以后观察程序

    运行的效果。因为之前也做过彩屏的东西,知道那玩艺代码量很大,要流畅地显

    示并不容,当时是用AVR 做的,在1.8 吋屏上显示一幅画要有一段时间。现在

    看起来,用STM32 做的驱动显示出来的画面还是很快的,不过这里显示的大部

    分是自画图,并没有完整地显示一整幅的照片,所以到底快到什么程度还不好说,

    看来不久以后这可以作为一个学习点的。

    一个晚上过去了,下一篇就是要开始keil 软件的学习了。

    STM32 学习笔记(2 )

    本想着偷点懒的,没想到竞被加了“精”,没办法啦,只能勤快点啦。。。

    硬件调通后,就要开始编程了。

    编程的方法有两种,一种是用st 提供的库,另一种是从最底层开始编程,网上

    关于使用哪种方法编程的讨论很多,据说用库的效率要低一些。但是用库编程非

    常方便,所以我还是从库开始啦。库是ST 提供的,怎么说也不会差到哪里,再

    说了,用32 位ARM 的话,开发的观念也要随之改变一点了。

    说说我怎么学的吧。

    找个例子,如GPIO,可以看到其结构如下:

    SOURCE (文件夹)

    - APP(文件夹)

    -CMSIS (文件夹)

    -STM32F10x_StdPeriph_Driver (文件夹)

    Lis (文件夹)

    OBJ (文件夹)

    其中SOURCE 中保存的是应用程序,其中又有好多子文件夹,而CMSIS 文件

    夹中和STM32F10x_StdPeriph_Driv

    展开全文
  • 1,一款实用的开发板。 这个是实验的基础,有时候软件仿真通过了,在板上并不一定能跑起来,而且有个开发板在手,什么...《STM32 参考手册》是 ST 出的官方资料,有 STM32 的详细介绍,包括了 STM32 的各种寄存器定义
  • 最详细的STM32CubeMX开发入门教程:一方面演示了STM32CubeMX软件的安装过程,另一方面以控制LED灯循环闪烁为例子,详细讲述STM32CubeMX结合Keil5进行联合开发的步骤流程。
  • STM32单片机编译器安装教程
  • 基于STM32F103单片机开发介绍.基于STM32F103单片机开发介绍.pdf
  • 基于STM32F103单片机的liteos移植项目keil5,包含完整项目,打开即用,需要安装keil5以及STM32F103程序包
  • STM32单片机嵌入式实战教程四章讲义
  • stm32f030例程驱动IO口,stm32f030例程驱动IO口闪烁,stm32f030例程定时器,stm32f030例程驱动IO口,串口
  • 实现功能:手机通过蓝牙,向STM32单片机发送消息,STM32接收到消息之后原封不动的返回给手机。当然如果掌握了这个例子,也可以修改成,手机发送特定的消息,然后,STM32单片机做出相对应的动作。比如:点亮LED等、...
  • 本文档针对应用开发,提供关于如何使用 STM32F101xx 和 STM32F103xx 微控制器的存储器 和外设的详细信息。在本参考手册中 STM32F101xx 和 STM32F103xx 被统称为 STM32F10xxx。
  • 基于STM32上开发的FreeRTOS系统,有很多详细例程和简要入门指导。
  • 3.1.1.STM32的来历背景1 3.1.2_3.STM32的来历背景2_3 3.1.4.STM32简单中文手册带读1 3.1.5.STM32简单中文手册带读2 3.1.6.STM32简单中文手册带读3 3.1.7.STM32的各种仿真器调试器是怎么回事 3.1.8.STM32的标准...
  • 我想说,为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习stm32呢? 这本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。 ...你要考虑的是, 我可以用STM...
  • 最简单DIY基于STM32单片机的WIFI智能小车设计方案

    千次阅读 多人点赞 2021-08-28 11:11:09
    第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F407探索者开发板的MPU6050陀螺仪姿态控制舵机程序 第四篇:最简单DIY...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,935
精华内容 2,374
关键字:

stm32单片机教程