stm32有多少个gpio口(stm32f103有多少个gpio口)

STM32学习 STM32芯片与GPIO

大家好,今天来为大家解答stm32有多少个gpio口这个问题的一些问题点,包括stm32gpio冷知识也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

本文目录

  1. stm32用gpio点亮一个led
  2. stm32f1的gpio有多少种输出工作模式
  3. 我发现,stm32l4为什么gpio时钟低于2M就不工作了
  4. stm32f103普通io口可以作为i2c通信接口吗

stm32用gpio点亮一个led

如果你LED一边接地,一边接GPIO。这样就可以关闭LED灯GPIO_ResetBits就是将对应的GPIO位输出0,两边电压差为0时就关闭LED灯了

stm32f1的gpio有多少种输出工作模式

stm32f1的gpio有四种输出工作模式:

-开漏输出(GPIO_Mode_Out_OD)

-开漏复用功能(GPIO_Mode_AF_OD)

-推挽式输出(GPIO_Mode_Out_PP)

-推挽式复用功能(GPIO_Mode_AF_PP)

-输入浮空(GPIO_Mode_IN_FLOATING)

-输入上拉(GPIO_Mode_IPU)

-输入下拉(GPIO_Mode_IPD)

-模拟输入(GPIO_Mode_AIN)

我发现,stm32l4为什么gpio时钟低于2M就不工作了

ARM的芯片都是这样,外设通常都是给了时钟后才能设置它的寄存器(即才能使用这个外设)STM32、LPC1XXX等等都是这样这么做的目的是为了省电,使用了所谓时钟门控的技术你的问题原因在于没有给时钟的情况下无法设置GPIO的寄存器补充:寄存器是基于触发器的,触发器的赋值是一定需要时钟的,而寄存器的时钟是由总线时钟提供的,就是说没有总线时钟的话,你给寄存器值它是不会读入的。

为了验证这个问题,你可以用jlink步步调试一下,看看在APB2不提供时钟的情况下,GPIO各个寄存器的值变否

stm32f103普通io口可以作为i2c通信接口吗

可以,模拟i2c即可,举例:

voidIIC_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

IIC_SCL=1;

IIC_SDA=1;

}

//产生IIC起始信号

voidIIC_Start(void)

{

SDA_OUT();//sda线输出

IIC_SDA=1;

IIC_SCL=1;

delay_us(4);

IIC_SDA=0;//START:whenCLKishigh,DATAchangeformhightolow

delay_us(4);

IIC_SCL=0;//钳住I2C总线,准备发送或接收数据

}

//产生IIC停止信号

voidIIC_Stop(void)

{

SDA_OUT();//sda线输出

IIC_SCL=0;

IIC_SDA=0;//STOP:whenCLKishighDATAchangeformlowtohigh

delay_us(4);

IIC_SCL=1;

IIC_SDA=1;//发送I2C总线结束信号

delay_us(4);

}

//等待应答信号到来

//返回值:1,接收应答失败

//0,接收应答成功

u8IIC_Wait_Ack(void)

{

u8ucErrTime=0;

SDA_IN();//SDA设置为输入

IIC_SDA=1;delay_us(1);

IIC_SCL=1;delay_us(1);

while(READ_SDA)

{

ucErrTime++;

if(ucErrTime>250)

{

IIC_Stop();

return1;

}

}

IIC_SCL=0;//时钟输出0

return0;

}

//产生ACK应答

voidIIC_Ack(void)

{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=0;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

//不产生ACK应答

voidIIC_NAck(void)

{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

//IIC发送一个字节

//返回从机有无应答

//1,有应答

//0,无应答

voidIIC_Send_Byte(u8txd)

{

u8t;

SDA_OUT();

IIC_SCL=0;//拉低时钟开始数据传输

for(t=0;t<8;t++)

{

IIC_SDA=(txd&0x80)>>7;

txd<<=1;

delay_us(2);//对TEA5767这三个延时都是必须的

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

delay_us(2);

}

}

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK

u8IIC_Read_Byte(unsignedcharack)

{

unsignedchari,receive=0;

SDA_IN();//SDA设置为输入

for(i=0;i<8;i++)

{

IIC_SCL=0;

delay_us(2);

IIC_SCL=1;

receive<<=1;

if(READ_SDA)receive++;

delay_us(1);

}

if(!ack)

IIC_NAck();//发送nACK

else

IIC_Ack();//发送ACK

returnreceive;

}

voidI2C_WriteByte(uint16_taddr,uint8_tdata,uint8_tdevice_addr)

{

IIC_Start();

if(device_addr==0xA0)//eeprom地址大于1字节

IIC_Send_Byte(0xA0+((addr/256)<<1));//发送高地址

else

IIC_Send_Byte(device_addr); //发器件地址

IIC_Wait_Ack();

IIC_Send_Byte(addr&0xFF);//发送低地址

IIC_Wait_Ack();

IIC_Send_Byte(data);//发送字节

IIC_Wait_Ack();

IIC_Stop();//产生一个停止条件

if(device_addr==0xA0)//

delay_ms(10);

else

delay_us(2);

}

uint16_tI2C_ReadByte(uint16_taddr,uint8_tdevice_addr,uint8_tByteNumToRead)//读寄存器或读数据

{

uint16_tdata;

IIC_Start();

if(device_addr==0xA0)

IIC_Send_Byte(0xA0+((addr/256)<<1));

else

IIC_Send_Byte(device_addr);

IIC_Wait_Ack();

IIC_Send_Byte(addr&0xFF);//发送低地址

IIC_Wait_Ack();

IIC_Start();

IIC_Send_Byte(device_addr+1); //发器件地址

IIC_Wait_Ack();

if(ByteNumToRead==1)//LM75温度数据为11bit

{

data=IIC_Read_Byte(0);

}

else

{

data=IIC_Read_Byte(1);

data=(data<<8)+IIC_Read_Byte(0);

}

IIC_Stop();//产生一个停止条件

returndata;

}

stm32有多少个gpio口的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于stm32gpio冷知识、stm32有多少个gpio口的信息别忘了在本站进行查找哦。

STM32 GPIO
标签: 有多少个 gpio

本文内容来自互联网,若需转载请注明:https://bk.jguuu.com//13/157964.html