stm32库函数学习笔记

刚刚开始学stm32,做个笔记,用的是野火的iso  f103z的板子

按照以往的经验,首先来点个灯。。。

和以往的51相比stm32的功能确实强了不少,啊不,是很多,各种脚各种功能。。。像以往51一样直接操作寄存器开发就变得不现实起来(并不是不可以,如果有人有耐心一边查芯片手册一边开发的话,或者能记住所有寄存器。。。然而就算用库我都得查手册。。。)

LED 实验中用到了 GPIO RCC(用于设置外设时钟)这两个片上外设,所以在操作I/O 之前我们需要把关于这两个外设的库文件添加到工程模板之中。它们分别为stm32f10x_gpio.cstm32f10x_rcc.c 文 件。其中stm32f10x_gpio.c 用 于 操 作 I/O,stm32f10x_rcc.c 用于配置系统时钟和外设时钟,由于每个外设都要配置时钟,所以它是每个外设都需要用到的库文件。

首先,我们来看看io操作。先初始化io口。这里库里面定义了一个初始化结构体GPIO_InitTypeDef,来看看它的定义:

typedef struct
{
 uint16_t GPIO_Pin; /*指定将要进行配置的 GPIO 引脚*/
 GPIOSpeed_TypeDef GPIO_Speed; /*指定 GPIO 引脚可输出的最高频率*/
 GPIOMode_TypeDef GPIO_Mode; /*指定 GPIO 引脚将要配置成的工作状态*/
}GPIO_InitTypeDef;

里面的数据st的库也用枚举类型定义了:

typedef enum
{
 GPIO_Speed_10MHz = 1, //枚举常量,值为 1,代表输出速率最高为 10MHz
 GPIO_Speed_2MHz, //对不赋值的枚举变量,自动加 1,此常量值为 2
 GPIO_Speed_50MHz //常量值为 3
}GPIOSpeed_TypeDef;

typedef enum
{ 
 GPIO_Mode_AIN = 0x0, //模拟输入模式
 GPIO_Mode_IN_FLOATING = 0x04, //浮空输入模式
 GPIO_Mode_IPD = 0x28, //下拉输入模式
 GPIO_Mode_IPU = 0x48, //上拉输入模式
 GPIO_Mode_Out_OD = 0x14, //开漏输出模式
 GPIO_Mode_Out_PP = 0x10, //通用推挽输出模式
 GPIO_Mode_AF_OD = 0x1C, //复用功能开漏输出
 GPIO_Mode_AF_PP = 0x18 //复用功能推挽输出
}GPIOMode_TypeDef;

同理,初始化也有封装好的库函数GPIO_Init(),用法也很简单
GPIO_InitTypeDef P;
P.GPIO_Pin = GPIO_Pin_0;	
P.GPIO_Mode = GPIO_Mode_Out_PP;
P.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &P);
先定义一个初始化结构体,然后通过初始化结构体里的值来赋初值,思路非常清晰。


这里还有一个重要的东西,就是时钟。首先,得开启外设时钟,系统时钟在启动文件里配置好了,这里还需要配置GPIO所需的时钟,GPIO采用的时钟是PCLK2,这里不得不提一下PB1和PB2的区别。

APB2负责AD,I/O,高级TIM,串口1。
APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM

所以我们的io是挂载在PB2上的,开启和关闭外设时钟同样有封装好的库函数

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE); 

同样还有控制io高低电平输出的GPIO_ResetBits(),GPIO_ResetBits()就不一一细说了,上代码:

/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   ÓÃ3.5.0°æ±¾¿â½¨µÄ¹¤³ÌÄ£°å
  ******************************************************************************
  * @attention
  *
  * ʵÑéƽ̨:Ò°»ð iSO STM32 ¿ª·¢°å 
  * ÂÛ̳    :http://www.chuxue123.com
  * ÌÔ±¦    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */
  
#include "stm32f10x.h"

/**
  * @brief  Ö÷º¯Êý
  * @param  ÎÞ
  * @retval ÎÞ
  */
int main(void)
{
	GPIO_InitTypeDef P;
		
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE); 

	P.GPIO_Pin = GPIO_Pin_0;
	P.GPIO_Mode = GPIO_Mode_Out_PP;
	P.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &P);
	
	P.GPIO_Pin = GPIO_Pin_7;
	GPIO_Init(GPIOF, &P);
		
	GPIO_SetBits(GPIOB, GPIO_Pin_0);	
	while(1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_0);
		GPIO_ResetBits(GPIOF, GPIO_Pin_7);
	}
	  /* add your code here ^_^. */
}

/*********************************************END OF FILE**********************/




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值