本次是第一次接触STM32,所以当然先从点亮led灯开始,由于拿到手的资料并不完善,所以一开始就遇到很大问题,不知道led灯对应的引脚,寄存器是什么,也不知道怎么去实现点亮一个灯的操作
后面在网上进行了资料的搜集,通过比对再结合led的原理图,终于实现了效果。
先上代码:
led灯原理图:
/**************************
* 本代码实现效果:
* led1灯(绿色)间歇性闪烁
**************************/
#include "stm32f10x.h"
void Delay_ms( uint16_t time_ms );
int main()
{
//开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
while(1)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET);
Delay_ms(500);
}
}
void Delay_ms( uint16_t time_ms )
{
uint16_t i,j;
for( i=0;i
STM32的GPIO相关学习:
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。
─ 输入浮空
─ 输入上拉
─ 输入下拉
─ 模拟输入
─ 开漏输出
─ 推挽式输出
─ 推挽式复用功能
─ 开漏复用功能
每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
RCC_APB2PeriphClockCmd()函数是设置外设时钟。ARM与C51单片机不同的是,不用外设的时候,如IO口、ADC、定时器等等,都是禁止时钟的,以达到节能的目的,只有要用到的外设,才开启它的时钟。因此在需要用到GPIOB的时候,我们需要先开启它的时钟。
GPIO配置初始化结构体:GPIO_InitTypeDef
原型:
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
设置GPIO的输出模式:为普通推挽输出
STM32的四种输出模式:
(1)普通推挽输出(GPIO_Mode_Out_PP)
使用场合:一般用在0V和3.3V的场合,负责上拉和下拉
输出电平:推挽输出的低电平是0V,高电平是3.3V
(2)普通开漏输出(GPIO_Mode_Out_OD)
使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平
(3)复用推挽输出(GPIO_Mode_AF_PP):用作串口的输出
(4)复用开漏输出(GPIO_Mode_AF_OD):用在IIC设备
所有的开漏输出都需要接上拉电阻
GPIO_WriteBit()原型: