微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

STM32F103ZE点灯

1.每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

2.GPIO口工作模式:

(1)上拉输入:增加高电平的驱动能力;

(2)下拉输入:增加低电平的驱动能力;

(3)模拟输入:检测模拟电压,数据传给ADC做转换(ADC:12位/8位/16位。103用的是12位的);

(4)浮空输入:不具备高低电平驱动能力,直接输入的电压进行转换;

 (5)推挽输出:直接把逻辑值输出成高低电平;

(6)开漏输出:只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能

(7)复用:把IO用做复用其他外设功能时选择复用模式;

(8)通用:只是把IO做普通输出功能

 

 3.TTL肖特基触发器:把高低电平电压值转换位逻辑值

        

 4、寄存器:片上外设存储相应配置数据/状态数据/数据值等的空间

        GPIO寄存器:

        

 

5.软件编程驱动:(点亮LED1)

(1)提供时钟:RCC   APB2外设时钟使能寄存器

(2)配置IO功能(0011)

(3)操作输出数据寄存器:控制外部输出的高低电平

          RCC->APB2ENR |=(0x01<<3);//时钟

         GPIOB->CRL &=~(0x0F<<4);

         GPIOB->CRL |=(0x03<<4);

代码

*************led.h*****************************************************

#ifndef LED_H

#define LED_H

#include "stm32f10x.h"

void led1_Config(void);

void led1(uint8_t flag);

#endif

*************led.c************************************************************

#include "led.h"

void led1_Config(void)

{

        //1、开时钟

        RCC->APB2ENR |=(0x01<<6);//打开时钟

        //2、进行配置    0011

        GPIOE->CRL &= ~(0xf<<8);//清零    xxxx  0000 xxxx xxxx

         GPIOE->CRL |= (0x3<<8);//置1      xxxx   0011 xxxx xxxx

}

void led1(uint8_t flag)

{

        if(flag == 1)//开灯

        GPIOE->ODR &= ~(0x1<<2);

        else if(flag == 0)//关灯

        GPIOE->ODR |= (0x1<<2);//置1

}

*********main.c*******************************************

#include"led.h"

int main(void)

{

        led1_Config();

        led1(1);//开灯

        //led1(0);//关灯

        while(1)

        {

                ;

        }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐