STM32学习第一课——新建工程与点亮LED灯

发布者:SereneWhisper最新更新时间:2019-09-27 来源: eefocus关键字:STM32  新建工程  点亮LED灯 手机看文章 扫描二维码
随时随地手机看文章

第一次接触到32位的MCU与之前所学的51单片机和430单片机都是有所不同的,STM32是用库函数来写程序的这样一来不管是从代码的编写和移植都会方便很多。以下是今天所学的东西:

1.新建工程

个人觉得不用去新建一个工程再一步一步的添加各种文件夹和文件,完全可以去官网、论坛或贴吧等地方下载模板,其中大部分文件都可以直接复制过来只需要把你要编程的文件建好就OK,接着只需要把.c .h文件添加进去就可以使用了。(最好把你要写的各种类型的.c.h文件都放在一个文件夹里g个人习惯放在PROJECT文件夹里)

工程里添加文件

工程里添加文件

点击魔术棒,在C/C++的窗口添加所需要用的文件夹(.c.h文件)

点击魔术棒,在C/C++的窗口添加所需要用的文件夹(.c.h文件)

点击魔术棒旁边的三色堆添加.c文件

d点击魔术棒旁边的三色堆添加.c文件

这样工程就建好了。

2.点亮LED灯

STM32的学习需要有两个宝:《STM32参考手册》和《STM32固件库使用手册》这两个文档对32的学习是很有帮助的,有很多途径可以下载。

想要点亮LED灯(所用芯片为STM32F103RC的小黑板)就要了解GPIO的功能和各种模式关于GPIO的配置有八种:(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出

GPIO_Speed_10MHz 最高输出速率10MHz

GPIO_Speed_2MHz 最高输出速率2MHz

GPIO_Speed_50MHz 最高输出速率50MHz

其中最常用的是推挽输出,推挽输出:可以输出高,低电平,连接数字器件。推挽输出与开漏输出是有区别的。开漏输出:输出端相当于三极管的集电极.

要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma)。这里简单说:开漏是0的时候接GND 1的时候浮空 推挽是0的时候接GND 1的时候接VCC

在配置IO口时必须要使IO口的时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);

以下为点亮D0的代码:


//FUNCTION:IO初始化

//DATA:20180913

void GPIo_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量     

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);//IO口时钟使能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_2;//选用管脚

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//设置引脚输出速率为 2M

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//IO推挽输出

    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化外设寄存器

GPIO_ResetBits(GPIOA, GPIO_Pin_8);//输出0

    //GPIO_Init(GPIOD, &GPIO_InitStructure);

    //GPIO_ResetBits(GPIOD, GPIO_Pin_2);

}


下载进单片机就可以点亮了。

总结:其实32也不是很难学,要掌握方法才能事半功倍。在这里有两个问题要搞懂:

1.开漏输出和推挽输出的理解:

开漏是0的时候接GND 1的时候浮空 推挽是0的时候接GND 1的时候接VCC

2.对于引脚的速率设置问题:

2.1对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

2.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。

2.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,

需要选用50M的GPIO的引脚速度。

3.编译过程中出现的警告

主函数大括号前后要空一行

.h文件定义时#endif也要前后空一行

关键字:STM32  新建工程  点亮LED灯 引用地址:STM32学习第一课——新建工程与点亮LED灯

上一篇:STM32学习之旅⑤ SPI控制TFT,从底层到顶层的设计
下一篇:STM32学习第二课——(操作)按键控制LED灯

推荐阅读最新更新时间:2024-11-11 12:02

STM32单片机串口通讯故障排除处理过程
STM32串口发送必须先检测状态,否则第一个 字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功, 使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04.。接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。 故障排除过程: 1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。 2、使用单步调试,单步运行各个发送指令,都正常。能收到0x
[单片机]
<font color='red'>STM32</font>单片机串口通讯故障排除处理过程
STM32时钟模块 STM32F103RCT6
跟51相比较STM32的时钟模块变得比较复杂起来这主要得益于STM强大的各种功能。对于不同的模块需要用到的时钟频率是不一样的。而较高的频率会造成更多的能量的浪费。以下是我在学习STM32过程中的总结。 首先我们要明白各个时钟模块的时钟来源。下面这张图是我调用了原子哥的参考手册里面的图。 首先我们来聊一下时钟的来源(图中标红了的5个数据),时钟源一共有5个。其中的PLLCLK(图中的5号时钟源)是从其他的时钟源转换过来的。下面我分别对这5个时钟源进行一下讲解。 (1)HSI图中的1号时钟源,是内部高速时钟。其时钟频率为8MHZ (2)HSE为高速外部时钟,可以接4-16MHZ的晶振(芯片PD0和PD1
[单片机]
单片机STM32的引脚模式设置
单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给“配置寄存器”对应的位写0或者1就可以达到目的。如下图: 如果是用库函数来配置的话,就需要知道下面这个结构体中的变量代表的意义。 库函数,选择好GPIO_Mode之后,就要使用GPIO_Init()函数来配置,你可以打开这个配置函数,实际上也是在对“配置寄存器”进行写操作。 先解释一下这个结构体中的各个变量的意思: GPIO_Mode_AIN:模拟输入模式 GPIO_Mode_IN_FLOATING:浮空输入模式 GPIO_Mode_IPD:下拉输入模式 GPIO_Mode_IPU:上拉输入模式 GPIO_Mode_Out_O
[单片机]
单片机<font color='red'>STM32</font>的引脚模式设置
STM32之ADC基础LCD显示
实验:通过 ADC1 的通道 5(PA5)来读取外部电压值,并显示在LCD上 1.ADC初始化函数解读 void Adc_Init(void) { //先定义三个结构体 GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RC
[单片机]
stm32的学习之存储器和总线架构
四个驱动单元:context-M3内核的D-bus总线和S-bus总线、通用DMA1和通用DMA2。 四个被驱动的单元:内部FLASH(内部山村存储器)、内部SRAM、FSMC、AHB到APB的桥AHP2APBx。 ICode总线是context-M3与内部闪存FLASH指令接口之间的连接的总线,实现指令的预取功能。 DCode总线是将context-M3与内部闪存存储器(FLASH)的数据接口连接起来的总线,实现数据读取。 系统总线(system bus)连接context-M3和总线矩阵,总线矩阵协调着context-M3和DMA间的访问。 DMA总线实现DMA的AHB主控接口道总线接口的连接。 总线矩阵 此总线矩阵协调内
[单片机]
stm32通用定时器的PWM输出
配置过程:(以TIM3为例,其CH1-CH4为:PA6、PA7、PB0、PB1) 1)开启TIM3时钟,配置4个IO口为复用推挽输出。 2)设置TIM3的ARR和PSC来控制PWM的周期。 3)设置TIM3的CH1-CH4的PWM模式及通道方向,使能TIM3的CH1-CH4输出。 4)使能TIM3。 程序如下: /* * 函数名:TIM3_GPIO_Config * 描述 :配置TIM3复用输出PWM时用到的I/O * 输入 :无 * 输出 :无 * 调用 :内部调用 */ void TIM3_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //PCLK1经
[单片机]
STM32学习之旅② 固件库的使用及工程模板的建立
一、认识其本质 STM32在进入中国市场的时候,商家为了迎合中国市场,翻译了很多英文文献,所以STM32相对与其他单片机的资料是相对丰富的,这也是很多人推崇STM32的原因,这对于我们学习来说也是相当不错的,但是由于翻译版本很多,注意以官方版本为准,在看文档发现不对时应该参考官方文档 固件库其实是官方为了加快开发速度,帮助用户快速上手芯片,进行二次开发而研究出来的,它的出现大大缩短了芯片开发周期 二、为什么要使用固件库 (一)基于寄存器的编程(传统编程方式) 好处:开发者可以了解单片机较为底层的寄存器,了解程序在硬件上的具体实现方式,便于纠错。 不足: 移植性差:由于单片机通常由很多外设,而不同型号的的单片机的寄存器操作方
[单片机]
<font color='red'>STM32</font>学习之旅② 固件库的使用及<font color='red'>工程</font>模板的建立
STM32实战四 定时器和按键
这一章编写定时器,包括定时器基类 Timer 和派生的通用定时器 GeneralTimer。基类对定时器参数进行封装,通用定时器封装一些定时应用,对应PLC的一些功能,包括: 1ms定时中断 100个32位数字时间继电器,最小1ms,最大0xffffffff,大约50天。 一个高精度回调函数,微秒级误差,最小定时间隔1ms。 按键抖动和干扰过滤,并产生按键上升沿和下降沿。 代码中有详细的说明,这里只解释几个知识点,其它文档介绍按键防抖和延时的时候一般都是死循环,官方文档也是这么用,如果有很多按键和延时就会一个一个等,效率很低。我这里用了另外一种高效的方法,就是模仿时间继电器,100个计数器同时工作,直到计数为0时执行对应操作,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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