跑马灯实验和我为什么使用库函数?_环球滚动
希望读者能点赞,互动,分享,让我更有动力,等我彻底写完stm32的学习日志,我会制作成电子书,分享给大家。
我为什么使用库函数进行编写程序?
截至2020年8月28日,ST公司一共开发了三个库,分别是标准外设库(STD),HAL库,LL库,此前使用直接控制寄存器的方式控制微处理器,从开发时间上是寄存器--->标准外设库--->HAL库--->LL库,其中寄存器的优点是代码量少,标准外设库可移植性强,HAL库和LL库虽然代码量少于标准外设库和固定平台的可移植性增强,但是在跨平台的可移植性大大降低,各平台的兼容性差,并且STM32Cube平台有些臃肿,我鉴于学习时间和未来的跨平台考虑,选择了标准外设库。
【资料图】
下面开始正文:
跑马灯实验:
重要翻译:
Reset Clock Controller ——RCC寄存器(复位时钟控制器寄存器)
步骤:
确定stm32中的所需引脚的连接LED0-PB5LED1-PE5确定使用库函数头文件Stm32f10x_gpio.hStm32f10x_rcc.h源文件Stm32f10x_gpio.cStm32f10x_rcc.c一般常见库函数重要函数:1个初始化函数:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
作用:
初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器
GPIOx: GPIOA~GPIOG
这里的 GPIO_InitTypeDef* GPIO_InitStruct为:
typedef struct { uint16_t GPIO_Pin; //指定要初始化的IO口 GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度 GPIOMode_TypeDef GPIO_Mode; //设置工作模式:8种中的一个 }GPIO_InitTypeDef;
GPIO_Init函数初始化样例:
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 ,可高可低 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
2个读取输入电平函数:uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。
例如:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。
例如:
GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平
2个读取输出电平函数:uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。
例如:
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。
例如:
GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平
4个设置输出电平函数:void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
这两个函数不常用,也是用来设置IO口输出电平。
编程文件结构图:
硬件编程:
Led.h
#ifndef __LED_H #define __LED_H //#include "sys.h" //LED 端口定义 //#define LED0 PBout(5)// DS0-digital signal 0//#define LED1 PEout(5)// DS1 void LED_Init(void);//初始化 #endif
Led.c
#include "led.h" #include "stm32f10x.h"//初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟 //LED IO 初始化 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能 PB,PE 端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //指定端口,LED0-->PB.5 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //指定模式,推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 GPIO_Init(GPIOB, &GPIO_InitStructure); //端口初始化 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高电平 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); //端口初始化 GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 }
main.c
#include "led.h" #include "delay.h" //#include "sys.h" #include "stm32f10x.h"//跑马灯实验 int main(void) { delay_init(); //延时函数初始化 LED_Init(); //初始化与 LED 连接的硬件接口 while(1) { //LED0 =0; //LED1 =1; //delay_ms(1000); //延时 300ms //LED0 =1; //LED1 =0; //delay_ms(300); //延时 300ms GPIO_SetBits(GPIOB,GPIO_Pin_5);//置高电平 GPIO_SetBits(GPIOE,GPIO_Pin_5);//同上 delay_ms(3000); GPIO_ResetBits(GPIOB,GPIO_Pin_5);//置低电平 GPIO_ResetBits(GPIOE,GPIO_Pin_5); delay_ms(3000); } }
添加头文件路径,设置obj路径,添加target文件夹和头文件,源文件
按照上面的步骤设置,就可以完成最简单的跑马灯实验。
标签:
相关文章
【报资讯】苯胺行情周报(5.1-5.8)
5月8日,生意社苯胺基准价为11750 00元 吨,与本月初(11775 00元 吨)相比,下降了-0 21%。据生意社商品行情
夏季易发生细菌性食源性疾病 气温升高 小心病从口入 世界热推荐
天津北方网讯:随着气温升高,各类病原微生物生长繁殖较快,细菌性食源性疾病进入高发期和易发期。市疾控中
跨境通将参加山西辖区上市公司投资者网上集体接待日活动-当前通讯
为进一步加强与投资者的互动交流,公司将参加“2023年山西辖区上市公司投资者集体接待日活动”。
法甲-姆巴佩破门梅西遭三停 巴黎3-1特鲁瓦6分领跑|今日报
法甲-姆巴佩破门梅西遭三停巴黎3-1特鲁瓦6分领跑,里奥梅西,特鲁瓦,姆巴佩,维拉蒂,佩雷拉,法甲
24孔复音口琴教学视频 24孔c调口琴bd谱大全集|天天快报
今天来聊聊关于24孔复音口琴教学视频,24孔c调口琴bd谱大全集的文章,现在就为大家来简单介绍下24孔复音口
中控智慧考勤软件下载_中控智慧考勤机使用说明 全球速看
1、刷卡判断身份时将卡在本机感应区轻轻一晃即可,切勿用卡片拍打机器。2、2.在初始化系统时,机器将会丢
新疆保险业首季提供风险保障超14万亿元-环球看点
一季度,新疆保险业累计为实体经济提供风险保障14 59万亿元,赔付支出84 81亿元。一季度,新疆保险业加快推
当前快播:3月我国汽车整车出口环比增长19.4% 同比增长1.6倍
智通财经APP获悉,据中汽协整理的海关总署数据显示,2023年3月,我国汽车整车出口环比增长19 4%,同比增长1
“富饶的神山”迈向深部勘采 国内最大的铌、钪、萤石产业呼之欲出_全球快资讯
坐拥世界第一大稀土矿藏、第二大铌、钍矿以及国内最大的萤石矿,白云鄂博被誉为“富饶的神山”,而背靠白云
人民币国际化稳步向前 今年一季度人民币跨境结算规模稳步扩大_环球看热讯
中银证券全球首席经济学家管涛:人民币作为融资货币的海外需求在逐渐增加,我们看到根据SWIFT(环球银行金
电脑修音软件推荐(电脑修音软件哪个好)
1、nEOiMAGING(光影魔术手)0 28┊数码照片画质处理的软件┊简体中文绿色正式版“nEOiMAGING”是一个对数码
世界今日报丨江川区气象台发布大风预警信号蓝色预警【Ⅳ级/一般】【2023-05-07】
江川区气象台2023年5月7日12时15分发布大风蓝色预警信号:预计未来12小时江川区将受大风影响,平均风力可达
每日视讯:三明市3家企业入选省级博士后创新实践基地
东南网5月6日讯(本网记者蔡晓卿)近日,省人社厅公布的2023年新设立省级博士后创新实践基地名单,三明推荐
动态:时隔多年后的换代,这次再无对手 全新梅赛德斯-奔驰E级前瞻分析
作为换代车型,全新奔驰E级(W214)之前是各种“挤牙膏”的方式给我们一点点透露信息,新车在造型和使用体
酒店住满民宿爆火!旅游市场重回上行通道,行业坚定全面复苏信心
小猪民宿数据显示,截至5月4日,平台“五一”期间乡村民宿订单量同比增长超过7倍,平均客单价约为500元。不