IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 task3学习记录 -> 正文阅读

[嵌入式]STM32 task3学习记录

Day3

?????? 由于视频学习太碎片化,而且容易跟不上思路,今天的学习先从读《STM32库开发实战指南》开始

  • 读书随记

1.GPIO被分为GPIOA、GPIOB等不同的组

2.每个端口16个引脚,每个引脚的模式由寄存器的四位控制

3.stm32f10x.h用宏定义的方式实现了地址映射

4.GPIO_TypeDef用typedef关键字声明了GPIO_TypeDef的结构体类型,结构体内定义了七个_IO uint32_t类型的变量

5.时钟系统

?????? 1)高速外部时钟HSE

?????? 2)高速内部时钟HIS

?????? 3)低速外部时钟LSE

?????? 4)低速内部时钟LSI

?????? 二、基于固件库的LED灯

1.配置环境

?????? 需要stm32f10x_gpio.c用于控制io口,stm32f10x_rcc.c配置外设时钟,以及头文件

(取消这两个的注释)

2.初始化结构体GPIO_InitTypeDef

??????

3.对GPIO结构体成员赋予控制参数

这样实现了对GPIO的初始化

4.开启外设时钟

?????? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

?????? 所有的GPIO都是挂载到APB2上的

?????? 开启复用时钟ADC1

?????? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

5.控制IO输出高低电平

?????? 这里要用到两个函数 GPIO_SetBits()输出高电平,GPIO_ResetBits()输出低电平。初始先调用GPIO_SetBits()函数让几个引脚输出高电平,使LED处于灭状态

6.续行符“/”

?????? 用于连接上下行代码,在/后面不能有空格、注释等一切杂物

7.写代码????

?? [main.c]



#include "stm32f10x.h"?

#include "bsp_led.h"



void Delay(__IO u32 nCount);



int main(void)

{

?????? /*LED端口初始化*/

?????? LED_GPIO_Config();

??????

?????? while(1)

?????? {

????????????? LED1(ON);???? //??? 亮

????????????? Delay(0x0FFFEF);

????????????? LED1(OFF); // 灭

?????????????

????????????? LED2(ON);???? //??? 亮

????????????? Delay(0x0FFFEF);

????????????? LED2(OFF); // 灭

?????????????

????????????? LED3(ON);???? //??? 亮

????????????? Delay(0x0FFFEF);

????????????? LED3(OFF); // 灭?????????

?????????????

?????? }

}



void Delay(__IO u32 nCount) //简单的延时函数

{

?????? for(; nCount !=0;nCount--);

}



?????? [bsp_led.c]



//板级支持包

#include "bsp_led.h"



void LED_GPIO_Config(void)

{

?????? /*定义一个GPIO_InitTypeDef类型的结构体*/

?????? GPIO_InitTypeDef GPIO_InitStructure;

??????

?????? /*开启GPIOC的外设时钟*/

?????? RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);

??????

?????? /*选择要控制的GPIOC引脚*/

?????? GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;

??????

?????? /*设置引脚模式为推挽输出*/

?????? GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

??????

?????? /*设置引脚速率为50MHz*/

?????? GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

??????

?????? /*调用库函数,初始化GPIOC*/

?????? GPIO_Init(GPIOC, &GPIO_InitStructure);

??????

?????? /*关闭所有LED*/

?????? GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);

}



?????? [bsp_led.h]



#ifndef __LED_H

#define? __LED_H





#include "stm32f10x.h"



/**

?? * 定义LED的开关

?? * 1是关,0是开

?? */

??

#define ON 0

#define OFF 1



//带参宏,可以像内联函数一样使用

#define LED1(a) if(a) \

?????? GPIO_SetBits(GPIOC,GPIO_Pin_3);\

?????? else \

?????? GPIO_ResetBits(GPIOC,GPIO_Pin_3)

??????

#define LED2(a) if(a) \

?????? GPIO_SetBits(GPIOC,GPIO_Pin_4);\

?????? else \

?????? GPIO_ResetBits(GPIOC,GPIO_Pin_4)

??????

#define LED3(a) if(a) \

?????? GPIO_SetBits(GPIOC,GPIO_Pin_5);\

?????? else \

?????? GPIO_ResetBits(GPIOC,GPIO_Pin_5)

??????

void LED_GPIO_Config(void);



#endif /* __LED_H */

?????? 三、寄存器方法编写跑马灯

1.原理图

根据LED硬件图,我们知道了点亮LED0LED1分别要对PB5和PE5这两位进行操作

2.写代码

//打开GPIOB端口的时钟

*(unsigned int *)0x40021018|=((1)<<3);

//配置IO口为输出

*(unsigned int *)0x40010C0C|=((1)<<(4*0)); //【野火版】

或者

【正点原子】

要注意通过“|“”&“操作实现对位的写入,通过<<实现对位移

今日总结:今天是收获颇丰的一天,通过实际写程序串联了前段时间的积累,可谓重见光明。当然,巨大的封装量(库函数)也让我认识到了32的高山比51高太多,要移这座山需要不断地投入才可以。

今天我先看书《库开发指南》然后再看视频,效果很好,因为书可以反复读,视频里一带而过的知识无法形成记忆,书可以很好的弥补这一点。多亏于此我彻底弄明白了GPIOx和CRLCRH等寄存器的作用

今天不知什么原因,写的程序不能点亮LED,我已经重新购买野火原装的仿真器,希望新的仿真器可以成功烧录文件

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章           查看所有文章
加:2021-08-25 23:45:20  更:2021-08-25 23:45:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:45:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计