欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F103+RTT从零开始(一)——点亮LED

程序员文章站 2022-06-09 08:42:17
...
原帖地址:http://blog.csdn.net/junzia/article/details/77435725
STM32F103+RTT从零开始(一)——点亮LED
标签: stm32
2017-08-22 23:42 662人阅读 评论(9) 收藏 举报
STM32F103+RTT从零开始(一)——点亮LED 分类:

目录(?)[+]

最近心血来潮,打算重新捡起老本行,结果发现很多都忘记了。干脆重新开始学习,并做个从零开始的笔记了。

STM32系列MCU

STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片适用于不同的应用场景。 
F0/L0基于ARM Cortex®-M0,F1/F2/L1系列基于ARM Cortex®-M3,F3/F4/L4系列基于ARM Cortex®-M4,F7/H7基于ARM Cortex®-M7。L系列表示超低功耗,H表示超高性能(对应就是高功耗了),F就是个折中方案了,性能不错,功耗也不高。

其他的先不管,F1系列芯片主要分类如下:

  • 超值型STM32F100 - 24 MHz CPU,具有电机控制和CEC功能
  • 基本型STM32F101 - 36 MHz CPU,具有高达1MB的Flash
  • 连接型STM32F102 – 48 MHz CPU具备USB FS device接口
  • 增强型STM32F103 - 72 MHz CPU,具有高达1MB的Flash、电机控制、USB和CAN
  • 互联型STM32F105/107 - 72 MHz CPU,具有以太网MAC、CAN和USB 2.0 OTG

STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下: 
STM32F103+RTT从零开始(一)——点亮LED

具体信息可查阅网站

RTT操作系统

官网的简介:

RT-Thread是一款来自中国的开源嵌入式实时操作系统,由国内一些专业开发人员从2006年开始开发、维护,除了类似FreeRTOS和UCOS的实时操作系统内核外,也包括一系列应用组件和驱动框架,如TCP/IP协议栈,虚拟文件系统,POSIX接口,图形用户界面,FreeModbus主从协议栈,CAN框架,动态模块等,因为系统稳定,功能丰富的特性被广泛用于新能源,电网,风机等高可靠性行业和设备上,已经被验证是一款高可靠的实时操作系统。 
RT-Thread实时操作系统遵循GPLv2+许可证,实时操作系统内核及所有开源组件可以免费在商业产品中使用,不需要公布应用源码,没有任何潜在商业风险。

RT-Thread操作系统源码风格与Linux一致,在官方提供的源码中,包含有诸多芯片的工程示例,LPC系列和STM32F系列的很多。再者RT-Thread代码开源,又有那么详细的资料,如果遇到官方bsp下没有的芯片,对于动手能力强的同学,自己动手移植也比较方便。而且官方提供了详细的中文文档,对于英语不太好的同学简直就是一个福音。更屌的是,使用者现在可以通过Keil来直接勾选使用RT-Thread,当然,RTX很早就可以了。后续使用的时候再细细体会它的强大之处了。

写寄存器Or利用固件库

嵌入式的编程,往下说就是操作MCU的寄存器。而固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。相对于固件库的方式,直接写寄存器的代码更为简洁,只需要对指定的寄存器进行需要的操作就可以了,但是对于STM32来说,寄存器多达数百个,记起来也是一件非常让人头疼的事情。ST推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 
关于写寄存器还是利用固件库去开发哪个好,一直都有争议,只能说存在即为合理,各有各的好处,我个人比较懒,不太喜欢去记那些寄存器都是啥。再者,我也不是专门搞STM32的,要是用写寄存器的方式开发的话,过一段时间不弄,再回来估计又得花些时间对着文档看了。所以在后续的博客,我也都会利用固件库开发。当然,用不用是一回事儿,根据官网技术文档,操作寄存器的方式是必须要会的。 
个人建议,还是需要学会看硬件文档,看官方的技术资料,而不是遇到问题就百度。学会看官方的技术文档后,遇到问题解决起来将会事半功倍。

点亮LED

点亮LED,首先自然是安装Keil了。当然,使用其他工具也可以,对于我来说,我还是比较钟情于Keil。我现在使用的是Keil5,编译工具链为MDK-ARM v5.24。开发板为淘宝上找的便宜的不能再便宜的一块STM32C8T6开发板,引脚都要自己焊。下载线为ST-Link v2。根据淘宝商提供的硬件资料,这个板子PB12连接了一个LED灯,LED另外一端连接了上拉电阻,即LED在PB12低电平时点亮。 
STM32F103+RTT从零开始(一)——点亮LED

废话不说了,Keil的安装和**,网上多的是,随便找个教程,走一走就完了。

第一步,创建工程

打开Keil后,首先需要创建个工程。点击project->New μVision Project。 
STM32F103+RTT从零开始(一)——点亮LED 
填写工程名 
STM32F103+RTT从零开始(一)——点亮LED 
选择芯片,如果没有你要的芯片,就需要到官网上去下载,然后安装。 
STM32F103+RTT从零开始(一)——点亮LED 
选择需要用到的功能,Core、Startup和GPIO,可以看到下面有警告,GPIO依赖FrameWork和RCC,也要去勾选上就好了。 
STM32F103+RTT从零开始(一)——点亮LED 
然后确定,工程就创建成功了。

第二步,增加main.c文件到工程中

点击如下按钮,创建一个新文件,并保存文件到工程目录中。 
STM32F103+RTT从零开始(一)——点亮LED 
点击工程管理按钮,管理工程 
STM32F103+RTT从零开始(一)——点亮LED 
点击Add Files 把main.c加入到Source Group 1下,Target 1和Source Group 1都可以修改,改成一个合适的名字。 
STM32F103+RTT从零开始(一)——点亮LED

第三部,编写main.c 文件

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

#define CLOCK 72/8

//时钟配置,后续再详细捋时钟这块的东西,现在姑且按照这样设置这者
void RCC_Configuration(void)   
{   
    ErrorStatus HSEStartUpStatus;   
    //将RCC寄存器设置为默认值
    RCC_DeInit(); 
    //打开外部高速时钟
    RCC_HSEConfig(RCC_HSE_ON);
    //等待外部高速时钟晶振起振
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
    if(HSEStartUpStatus == SUCCESS){
        //设置PLL时钟时钟源及倍频系数   
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_16);
        //设置AHB时钟
        RCC_HCLKConfig(RCC_SYSCLK_Div1); 
        //设置APB1低速时钟
        RCC_PCLK1Config(RCC_HCLK_Div2);
        //设置APB2高速时钟
        RCC_PCLK2Config(RCC_HCLK_Div1); 
        //使能PLL
        RCC_PLLCmd(ENABLE);
        //等待PLL工作
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)    
        {   
        } 
        //设置系统时钟为PLL时钟
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //等待系统时钟切换为PLL时钟
        while(RCC_GetSYSCLKSource() != 0x08)    
        {   
        }   
    }
    //打开需要使用的外设的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |   
    RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);   
}

//延时微妙
void delay_us(unsigned int us)
{
    u8 n;           
    while(us--)for(n=0;n<CLOCK;n++);     
}

int main(){
    RCC_Configuration();
    //设置GPIOB12 为推挽输出模式,速度为2MHz
    GPIO_InitTypeDef gpioInit;
    gpioInit.GPIO_Mode=GPIO_Mode_Out_PP;
    gpioInit.GPIO_Pin=GPIO_Pin_12;
    gpioInit.GPIO_Speed=GPIO_Speed_2MHz;
    GPIO_Init(GPIOB,&gpioInit);

    while(1){
        //点亮LED
        GPIO_ResetBits(GPIOB,GPIO_Pin_12);
        //延时500ms
        delay_us(500000);
        //关闭LED
        GPIO_SetBits(GPIOB,GPIO_Pin_12);
        //延时500ms
        delay_us(500000);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

第四步,配置并编译烧写程序

点击build按钮,或者rebuild按钮进行编译 
STM32F103+RTT从零开始(一)——点亮LED 
编译成功,Build Output输出如下: 
STM32F103+RTT从零开始(一)——点亮LED

无错误,然后可以进行程序烧写,烧写前需要设置Options for target。我使用的是ST-Link,所以需要选择ST-Link Debugger。然后点击后面的Setting按钮,进行其他设置。 
STM32F103+RTT从零开始(一)——点亮LEDSTM32F103+RTT从零开始(一)——点亮LED 
STM32F103+RTT从零开始(一)——点亮LED 
STM32F103+RTT从零开始(一)——点亮LED

设置完毕后点击download按钮,进行烧写即可。烧写时,让Boot0接低电平。 
STM32F103+RTT从零开始(一)——点亮LED

相关标签: stm32