STM32_IO口操作

合集下载

STM32端口输入输出模式配置

STM32端口输入输出模式配置

STM32端⼝输⼊输出模式配置STM32的IO⼝模式配置根据数据⼿册提供的信息,stm32的io⼝⼀共有⼋种模式,他们分别是:四种输⼊模式上拉输⼊:通过内部的上拉电阻将⼀个不确定的信号通过⼀个电阻拉到⾼电平。

下拉输⼊:把电压拉到GND。

与上拉原理相似。

浮空输⼊:引脚内部什么都不接,处于浮空模式下,电平状态是不确定的。

外部信号输⼊什么,IO⼝就是什么状态。

模拟输⼊:接收到的是连续的模拟信号,⼀般⽤于AD转换。

四种输出模式推挽输出:可以输出⾼低电平,连接数字器件。

在stm32中推挽电路由两个MOS管组成:输出⾼电平时P-MOS管导通,引脚联通VDD(3.3v)。

输出低电平时N-MOS导通,引脚联通GND。

**该⽅式既提⾼电路的负载能⼒,⼜提⾼开关速度。

**开漏输出:⽆法直接输出⾼电平,要在外部连接上拉电阻才⾏,输出的电压由上拉电阻连接的电源决定。

适合做电流型的驱动,其吸收电流的能⼒相对强(⼀般20ma以内)。

开漏输出还有⼀个特性:线与。

即很多开漏模式引脚连接在⼀起,只有当所有引脚都输出1时,才能够被上拉电阻拉到⾼电平。

若有⼀个引脚为低电平,则所有引脚相当于接地。

复⽤推挽输出:简单来说就是给内部外设使⽤的推挽输出模式,复⽤开漏输出:简单来说就是给内部外设使⽤的开漏输出模式在STM32中,根据不同的使⽤场景,选⽤不同的IO模式:GPIO_Mode_AIN:模拟输⼊,⼀般⽤作模数转换GPIO_Mode_IN_FLOATING:浮空输⼊,常⽤在key识别上**GPIO_Mode_IPD: **下拉输⼊--- IO内部下拉电阻输⼊GPIO_Mode_IPU:上拉输⼊--- IO内部上拉电阻输⼊GPIO_Mode_Out_OD:开漏输出---可以外接上拉电阻输出较⾼的电平,也能够通过读取IO的电平变化实现C51的IO双向功能。

**GPIO_Mode_Out_PP: **推挽输出---IO输出0-接GND,IO输出1 -接VCC,读输⼊值是未知的。

STM32-IO口操作

STM32-IO口操作

1、不使用库函数的IO口操作Systick 部分内容属于NVIC控制部分,一共有4个寄存器SysTick_CTRL, 0xE000E010 -- 控制寄存器默认值:0x0000 0004SysTick_LOAD, 0xE000E014 -- 重载寄存器默认值:0x0000 0000SysTick_VAL, 0xE000E018 -- 当前值寄存器默认值:0x0000 0000SysTick_CALIB, 0xE000E01C -- 校准值寄存器默认值:0x0002328SysTick_CTRL 寄存器内有4个bit具有意义第0位:ENABLE,Systick 使能位(0:关闭Systick功能;1:开启Systick功能)第1位:TICKINT,Systick 中断使能位(0:关闭Systick中断;1:开启Systick中断)第2位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为系统时钟)第16位:COUNTFLAG,Systick计数比较标志IO口的位操作实现该部分代码实现对STM32各个IO口的位操作,包括读入和输出。

当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。

此部分仅仅对IO口进行输入输出读取和控制。

代码如下:#define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum)) //IO口地址映射#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 55//IO口操作,只对单一的IO口!//确保n的值小于16!#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入以上代码的实现得益于CM3的位带操作,具体的实现比较复杂,请参考<<CM3权威指南>>第五章(87页~92页)。

stm32读取io口高电平范围

stm32读取io口高电平范围

主题:STM32读取IO口高电平范围分析内容:1. STM32简介1.1 STM32是由意法半导体公司推出的一款32位嵌入式微控制器产品线。

1.2 STM32具有高性能、低功耗、丰富的外设接口和丰富的开发工具支持等特点。

2. IO口的定义2.1 IO口是微控制器上的通用输入输出引脚,可以通过程序控制其电平状态。

2.2 在一般情况下,IO口可以设置为输入模式或输出模式。

3. STM32读取IO口高电平的方法3.1 使用GPIO读取寄存器3.1.1 GPIO读取寄存器是用来读取IO口的高电平状态的寄存器。

3.1.2 该寄存器可以通过位操作来读取每个IO口的状态,可以获取其高电平状态。

3.2 使用外部中断3.2.1 在需要及时响应IO口状态变化的情况下,可以使用外部中断来读取IO口的高电平状态。

3.2.2 外部中断可以在IO口状态发生变化时立即响应,提高了系统的实时性。

3.3 使用定时器3.3.1 定时器可以周期性地读取IO口的状态,对于需要进行定时采集的场景较为适用。

3.3.2 通过定时器可以定时读取IO口的高电平状态,并进行相应的处理和分析。

4. STM32读取IO口高电平的限制4.1 IO口的速度限制4.1.1 由于IO口的速度限制,读取高电平的频率受到一定的限制。

4.1.2 针对高速信号的IO口读取,需要根据具体情况选择合适的读取方法。

4.2 IO口的电压范围限制4.2.1 STM32的IO口在读取高电平时,需要注意其电压范围的限制。

4.2.2 超过了IO口能够承受的电压范围,可能会损坏IO口或引发其他问题。

5. 结论5.1 通过GPIO读取寄存器、外部中断、定时器等方法,可以实现STM32读取IO口高电平的功能。

5.2 在使用这些方法时,需要注意IO口的速度限制和电压范围限制,以确保系统的稳定性和安全性。

结尾:以上就是对STM32读取IO口高电平范围的分析,希望对您有所帮助。

如有任何问题,欢迎交流讨论。

STM32的IO口设置方法实例

STM32的IO口设置方法实例

STM32的IO⼝设置⽅法实例STM32的IO⼝设置⽅法实例!通过本节的学习,你将了解到STM32的IO⼝作为输出使⽤的⽅法。

本节分为如下⼏个⼩节:3.1.1 STM32 IO⼝简介3.1.2 硬件设计3.1.3 软件设计3.1.4 仿真与下载3.1.1 STM32 IO简介作为所有开发板的经典⼊门实验,莫过于跑马灯了。

ALIENTEK MiniSTM32开发板板载了2个LED,DS0和DS1,本实验将通过教你如何控制这两个灯实现交替闪烁的类跑马灯效果。

该实验的关键在于如何控制STM32的IO⼝输出。

了解了STM32的IO⼝如何输出的,就可以实现跑马灯了。

通过这⼀节的学习,你将初步掌握STM32基本IO⼝的使⽤,⽽这是迈向STM32的第⼀步。

STM32的IO⼝可以由软件配置成8种模式:1、输⼊浮空2、输⼊上拉3、输⼊下拉4、模拟输⼊5、开漏输出6、推挽输出7、推挽式复⽤功能8、开漏复⽤功能每个IO⼝可以⾃由编程,单IO⼝寄存器必须要按32位字被访问。

STM32的很多IO⼝都是5V兼容的,这些IO⼝在与5V电平的外设连接的时候很有优势,具体哪些IO⼝是5V兼容的,可以从该芯⽚的数据⼿册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。

STM32的每个IO端⼝都有7个寄存器来控制。

他们分别是:配置模式的2个32位的端⼝配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;⼀个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这⾥我们仅介绍常⽤的⼏个寄存器,我们常⽤的IO端⼝寄存器只有4个:CRL、CRH、IDR、ODR。

CRL和CRH控制着每个IO⼝的模式及输出速率。

STM32的IO⼝位配置表如表3.1.1.1所⽰:表3.1.1.1 STM32的IO⼝位配置表STM32输出模式配置如表3.1.1.2所⽰:表3.1.1.2 STM32输出模式配置表接下来我们看看端⼝低配置寄存器CRL的描述,如下图所⽰:图3.1.1.1端⼝低配置寄存器CRL各位描述该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端⼝为浮空输⼊模式。

stm32单片机 io口对地电阻

stm32单片机 io口对地电阻

一、概述在嵌入式系统开发中,常常需要对STM32单片机的IO口进行操作。

其中,IO口对地电阻的问题是一个重要的话题。

本文将详细介绍STM32单片机IO口对地电阻的相关知识,包括其原理、计算方法和在实际开发中的应用。

二、STM32单片机IO口对地电阻的原理1. STM32单片机IO口STM32单片机拥有丰富的外设资源,其中IO口是其中最基本的一个。

IO口可以设置为输入或者输出模式,用于连接外部设备或者作为数据输入输出的通道。

2. IO口对地电阻的概念在使用IO口时,会涉及到与地之间的电阻。

当IO口处于输出模式时,如果外部设备与IO口相连,就会形成一个电路。

而在该电路中,IO口与地之间的电阻就称为IO口对地电阻。

IO口对地电阻的大小会影响IO口的输出电平和稳定性,因此需要合理设置。

三、STM32单片机IO口对地电阻的计算方法1. IO口对地电阻的计算公式IO口对地电阻的大小可以通过计算得出。

假设STM32单片机输出高电平时的输出电流为I,输出低电平时的输出电流为I_L,从而可以得到IO口对地电阻的计算公式如下:R = V / I其中R为IO口对地电阻,V为IO口输出高电平时的电压。

2. 实际计算方法在实际计算中,需要先确定IO口的输出电压和输出电流大小,然后通过上述公式即可计算得出IO口对地电阻的大小。

在计算时需要考虑实际电路中的影响因素,如外部电阻等。

四、STM32单片机IO口对地电阻的应用1. IO口对地电阻的影响IO口对地电阻的大小直接影响了IO口输出电平的稳定性和可靠性。

较大的IO口对地电阻会导致输出电平波动较大,甚至无法正常输出高电平。

合理设置IO口对地电阻对于保证IO口正常工作至关重要。

2. 设置IO口对地电阻的方法在实际开发中,可以采取一定的措施来设置IO口对地电阻。

可以通过外部电路方式对IO口进行负载补偿,从而降低IO口对地电阻的大小,提高输出稳定性。

五、结论本文从STM32单片机IO口对地电阻的原理、计算方法和应用进行了详细介绍。

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。

上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。

要得到高电平状态需要上拉电阻才行。

适合于做电流型的驱动,。

STM32的IO端口高8位或低8位单独操作方法

STM32的IO端口高8位或低8位单独操作方法
位操作,都是在置1的时候对某位有影响.
举例说下怎幺对IO端口赋值:
1.对高8位/低8位/全部清零
很明显,这个只需要操作BRR寄存器即可:
对高8位清零:GPIOA->BRR=0xFF00
对低8位清零:GPIOA->BRR=0x00FF
全部清零:GPIOA->BRR=0xFFFF或GPIOA->ODR=0x0000
1,置0的位不影响原来的值
高16位应该置为0000000010101010,这个就等于~0x55(即取反)的结
果,置1使某位为ห้องสมุดไป่ตู้,置0不影响原来的值
这样,BSRR寄存器的值就是00000000101010100000000001010101,
两部分的高8位均为0,所以不会影响到IO口的高8位
总结,以下的宏实现对某端口的低8位置数,不影响高8位:
STM32的IO端口高8位或低8位单独操作方法
几天前刚接触stm32的时候,被单独操作IO口给弄糊涂了,现记录下,现
在发现其实蛮简单的,只是刚开始的时候~~~
stm32的IO端口都是16位的,如果要单独操作某高8位或低8位,则不
是那幺简单,先看两张BSRR/BRR寄存器的图:
据官方数据手册上面说,这两个寄存器用于专门对ODR进行原子操作的
#defineGPIO_WriteLow(GPIOx,a)GPIOx-
>BSRR=(((uint32_t)(uint8_t)~(a))BSRR=(((uint8_t)(uint8_t)~(a))BSRR=value的
形式,所以担心是多余的
当然了,使用下面2,3的两个宏也可以完全该清零操作~stm32固件库是不
是应该加上这两个宏/函数?

stm32位操作详解

stm32位操作详解

stm32位操作详解stm32位操作详解STM32位操作原理思想:把⼀个⽐特分成32位,每位都分配⼀个地址,这样就有32个地址,通过地址直接访问。

位操作基础位运算位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由⼆进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。

位运算&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。

其中,按位取反运算符是单⽬运算符,其余均为双⽬运算符。

位运算符的优先级从⾼到低,依次为~、&、^、|,其中~的结合⽅向⾃右⾄左,且优先级⾼于算术运算符,其余运算符的结合⽅向都是⾃左⾄右,且优先级低于关系运算符。

(1)按位与运算符(&)按位与运算将两个运算分量的对应位按位遵照以下规则进⾏计算:0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。

即同为1的位,结果为1,否则结果为0。

例如,设3的内部表⽰为000000115的内部表⽰为00000101则3&5的结果为00000001按位与运算有两种典型⽤法,⼀是取⼀个位串信息的某⼏位,如以下代码截取x的最低7位:x & 0177。

⼆是让某变量保留某⼏位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。

以上⽤法都先要设计好⼀个常数,该常数只有需要的位是 (2)按位或运算符(|)按位或运算将两个运算分量的对应位按位遵照以下规则进⾏计算:0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1即只要有1个是1的位,结果为1,否则为0。

例如,023 | 035结果为037。

按位或运算的典型⽤法是将⼀个位串信息的某⼏位置成1。

如将要获得最右4为1,其他位与变量j的其他位相同,可⽤逻辑或运算017|j。

若要把这结果赋给变量j,可写成:j = 017|j(3)按位异或运算符(^)按位异或运算将两个运算分量的对应位按位遵照以下规则进⾏计算:0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0即相应位的值相同的,结果为0,不相同的结果为1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、不使用库函数的IO口操作Systick 部分内容属于NVIC控制部分,一共有4个寄存器SysTick_CTRL, 0xE000E010 -- 控制寄存器默认值:0x0000 0004SysTick_LOAD, 0xE000E014 -- 重载寄存器默认值:0x0000 0000SysTick_VAL, 0xE000E018 -- 当前值寄存器默认值:0x0000 0000SysTick_CALIB, 0xE000E01C -- 校准值寄存器默认值:0x0002328SysTick_CTRL 寄存器内有4个bit具有意义第0位:ENABLE,Systick 使能位(0:关闭Systick功能;1:开启Systick功能)第1位:TICKINT,Systick 中断使能位(0:关闭Systick中断;1:开启Systick中断)第2位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK 作为系统时钟)第16位:COUNTFLAG,Systick计数比较标志IO口的位操作实现该部分代码实现对STM32各个IO口的位操作,包括读入和输出。

当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。

此部分仅仅对IO口进行输入输出读取和控制。

代码如下:#define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 55#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08//IO口操作,只对单一的IO口!//确保n的值小于16!#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入以上代码的实现得益于CM3的位带操作,具体的实现比较复杂,请参考<<CM3权威指南>>第五章(87页~92页)。

有了上面的代码,我们就可以像51/A VR一样操作STM32的IO口了。

比如,我要PORTA的第七个IO口输出1,则可以使用PAout(6)=1;既可以实现。

我要判断PORTA的第15个位是否等于1,则可以使用if(PAin(14)==1)…;就可以了。

另种方式:(基本上做出来了)我的STM32板子PA0和PA1接的LED灯,所以先映射这两位。

查看手册中的寄存器组起始地址(原文件名:地址.jpg)引用图片GPIOA是 0x4001 0800GPIOD是0x4001 1400端口输出数据寄存器(GPIOx_ODR) 的偏移地址是 0x0c根据公式:别名区 = ADDRESS=0x4200 0000 + (0x0001 080C*0x20) + (bitx* 4) ;bitx:第x位得到PA.0和PA.1的别名区地址#define PA_Bit0 ((volatile unsigned long *) (0x42210180))#define PA_Bit1 ((volatile unsigned long *) (0x42210184))//42228180#define PD_Bit7 ((volatile unsigned long *) (0x4222819C))#define PD_Bit13 ((volatile unsigned long *) (0x422281CC))#define PD_Bit3 ((volatile unsigned long *) (0x4222818C))#define PD_Bit4 ((volatile unsigned long *) (0x42228190))接下来就可以对PA.0和PA.1进行位操作了*PA_Bit0 = 1; //PA.0 置1*PA_Bit1 = 0; //PA.1 置0还可以读出这一位的值:while(1){*PA_Bit1 =(~*PA_Bit1);Delay(1000); //延时1秒}PA.1接的LED会闪烁。

由于对STM32的存储结构不了解,0x4200 0000不知道是从哪里来的。

后来看到了一个PDF文档(原文件名:存储.jpg)引用图片原来0x4200 0000是外设别名区域的地址。

我也是刚刚学习STM32,有错误的地方请大家指点。

3、使用库函数,如下部分程序对IO的操作。

while(1){/* Turn on LD1 */GPIO_SetBits(GPIOD, GPIO_Pin_8);/* Insert delay */Delay(0xAFFFF);/* Turn on LD2 and LD3 */GPIO_SetBits(GPIOD, GPIO_Pin_9 | GPIO_Pin_10);/* Turn off LD1 */GPIO_ResetBits(GPIOD, GPIO_Pin_8);/* Insert delay */Delay(0xAFFFF);/* Turn on LD4 */GPIO_SetBits(GPIOD, GPIO_Pin_11);/* Turn off LD2 and LD3 */GPIO_ResetBits(GPIOD, GPIO_Pin_10 | GPIO_Pin_9);/* Insert delay */Delay(0xAFFFF);/* Turn off LD4 */GPIO_ResetBits(GPIOD, GPIO_Pin_11);}4、IO1PIN=(IO1PIN&0xff00ffff)|((Reg_Code&0xff)<<16);//将要写的数据先赋给单片机的16~23脚5、最小系统板上可以使用的普通IO口:A 0-150-10、12、13可作为一般的IO口使用,由于有第二功能,11、14、15管脚在普通IO口时会有不正常现象(比如设置成高电平输出时14电压几乎为0;设置成带上拉输入时11电压也很小(0.9左右),14电压几乎为0),在使用时应避免使用这些口B 0-15C 0-15D 0 1 2EFG6、IO口模式①模拟输入模式(GPIO_Mode_AIN)PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PB0,PB1,PC0, PC1, PC2,PC3,PC4,PC5可以设置成该模式,即这16个口可以用作AD输入②输入浮空模式(GPIO_Mode_IN_FLOATING)UART的输入引脚设置成该模式③带下拉输入(GPIO_Mode_IPD)④带上拉输入(GPIO_Mode_IPU)⑤开漏输出(GPIO_Mode_Out_OD)输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).要实现线与需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。

输出既可以向负载灌电流,也可以从负载抽取电流。

相关文档
最新文档