原创 STM32F103学习笔记-入门

2014-5-23 14:58 3970 20 23 分类: MCU/ 嵌入式 文集: 步进电机驱动笔记

下午安装好了keil3,编译了一下程序,下载OK,现在开始要正式开始学习了,历程里面有一个头文件。

例程很简单,如下:
#include "stm32f10x_lib.h"
int main(void)
{
  while (1)
  {
  GPIO_AFIODeInit();
  }
}
直接看头文件。会有资源的定义以及函数的定义。
这些东西在选芯片的时候,编译器会自动进行宏定义。
先从最简单的GPIO的头文件开始看:
先从最简单的端口GPIO来看:
头函数中有一个结构体:
typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;
对应手册中有如下的GPIO寄存器
其中CRL为端口配置寄存器低,其中包括了端口0~7的配置,每一个位配置,占用4位:
其中前两位:
CNF0在输入时,包括了三种配置功能:
模拟方式输入,浮置输入(复位状态),带上拉或者下拉的输入
如果为输出,普通的推挽输出,开漏输出,交替功能的推挽和开漏输出。
MODE配置包括:配置为输入,后面三个为输出模式,限制速度的设置,包括,2M,10M,50M
 
第二个寄存器,为高8~15脚的配置。
第三个为端口输入,共16个脚,数据共16位。
第四个为端口输出,同上。输出只能16位同时进行,如果要单独配置某位,则设置下面的寄存器。
第五个为复位或者置位某位的寄存器:前16位为复位,后为置位,置位优先。
第六个为复位端口寄存器,好像和上面寄存器有重复。
第七个为锁位寄存器,复位的时候才能清空。或者通过锁密码来进行修改。
 
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
初始化的函数.
使用的方法如下:
第一个参数:结构体,指向GPIOX的所有寄存器,在上面有定义。
第二个参数:结构体,定义如下:
typedef struct
{
  u16 GPIO_Pin;
  GPIOSpeed_TypeDef GPIO_Speed;
  GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
如果要操作GPIOA,则先将选择端口为GPIOA,然后把后面的结构体填充好:
比如,GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
表示我要对A6~A9脚进行配置。然后设置模式,如下:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
模式一共有8种,在上面介绍过,枚举如下:
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;
好,设置A6~A9脚为推挽输出,然后配置一下速度:
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
同样枚举出来,一共三种速度
typedef enum
{
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz,
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
这样,结构体定义完毕,就可以进行初始化了:
GPIO_Init(GPIOA, &GPIO_InitStructure);
初始化后,A6~A9为推挽输出,速度限制为50M。
如果要给端口置电平,则用下面的函数:
    GPIO_SetBits(GPIOA, GPIO_Pin_6);
然后置地,函数如下:
 GPIO_ResetBits(GPIOA, GPIO_Pin_6);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

东莞元宝代理Microchip长电二三极管 2015-6-26 11:17

国际电子商情博主:残怡悟恩!是这方面的高手!

806494566_654546512 2014-6-21 21:14

好资料 学习了

用户1759716 2014-5-27 12:45

有stm32爱好者吗?一起学习,qq:511903832
相关推荐阅读
用户1714690 2015-08-13 11:42
史上最高性价比PCI运动控制卡:基于MCX314AL,提供开发包!
  小日本的3轴插补运动控制卡芯片不是一般的贵啊,看看下面的某宝提供的报价:常用的基于PCI的运动控制卡已经在国内大规模应用,主要有如下问题: 所以基于这种芯片的...
用户1714690 2015-08-03 15:06
【博客大赛】TMC262步进伺服开发笔记1-选定STM32F103C8T6做为控制器
  现在手里已经有了两个方案: 一个STC单片机的方案,这个是网上一个工程师设计的,方案的程序很简单,简单的进行参数配置,然后驱动电机转动就OK,完全没有发挥出TMC262的优势。 一...
用户1714690 2015-08-03 15:06
【博客大赛】TMC262步进伺服开发笔记2-影响步进电机行为的几个参数
电机设置,首先得了解哪些参数会对电机的行为有直接或者间接的影响。 参数 描述 设置 电机...
用户1714690 2014-12-26 17:56
自己动手设计一款MP3音乐播放器-创建自己的公众号
    罗永浩今年的表现确实让各界大跌眼镜,这几个月销声匿迹也是情理之中的事情,我们确实该吐槽他的锤子手机,可是他的死磕精神呢? ...
用户1714690 2014-12-13 01:19
自己动手设计一款MP3音乐播放器:SDIO通信之物理层描述1
物理层一共有以下的内容需要了解 存储卡系统的内容,包括总线,卡容量等,一些命令格式,响应格式等内容,这个是必须完全理解。 SD卡的功能描述,包括复位,初始化和识别流程,读写...
用户1714690 2014-12-12 11:51
自己动手设计一款MP3音乐播放器
 最近打算利用晚上的时间来死磕一款MP3,之前一直做的都是工控之类的项目,并且偏向于硬件,最近打算做一款有意思一点的产品,利用晚上的时间来做,项目可能会拖的比较久。   当然也不能自己埋头...
EE直播间
更多
我要评论
3
20
关闭 站长推荐上一条 /3 下一条