GPIO和中断学习课件.pptxVIP

  • 1
  • 0
  • 约4.9千字
  • 约 116页
  • 2023-06-19 发布于上海
  • 举报
GPIO和中断学习课件;GPIO特色;GPIO功能描述;I/O引脚的8种配置模式 ?输入: 浮空 上/下拉 模拟输入 ?输出: 可配置上/下拉的推挽输出 开漏输出;推挽输出:可以输出高,低电平,连接数字器件 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). ;每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。 GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;端口位配置表 ;I/O端口位的基本结构 ;输入浮空/上拉/下拉配置 ;输出配置 ;复用功能配置;复用功能;模拟输入配置;GPIO寄存器的操作;GPIO_Mode值;例如:IO配置;配置GPIO口;GPIO_Pin ;GPIO库函数;函数GPIO_Init ;函数GPIO_StructInit ;GPIO_InitStruct缺省值 GPIO_InitTypeDef GPIO_InitStructure; GPIO_StructInit(GPIO_InitStructure); ;函数GPIO_SetBits ;函数GPIO_ResetBits ;函数GPIO_WriteBit ;函数GPIO_Write ;函数GPIO_ReadOutputDataBit ;GPIO固件库;;试计算GPIOA_BASE实际地址 对照内存地址分配进行分析;GPIO完整的固件库;例如:对端口 A的8脚进行数据的读取,如果其数据位1,就写零;如果是0,就写1。;函数GPIO_ReadOutputData ;函数GPIO_PinLockConfig ;GPIO编程实现步骤;例如:实现下列LED的闪烁程序;#include stm32f10x.h int main(void) { //打开相应外设的时钟:GPIOB RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //初始化GPIOB,用于驱动LED GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速度为50MHz GPIO_Init(GPIOB, GPIO_InitStructure); while (1) { GPIO_SetBits(GPIOB,GPIO_Pin_8);//点亮LED1 Delay(1000000);//多点亮一会,使人能看到LED的确切变化 Delay(1000000); GPIO_ResetBits(GPIOB,GPIO_Pin_8);//熄灭LED1 Delay(1000000); Delay(1000000); } } void Delay(vu32 nCount) { for(; nCount != 0; nCount--); };例如:实现下列LED的闪烁程序;#include stm32f10x.h“ #define LED_ALL GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4 int main(void) { unsigned char j=0; chLsd=0xFE; //打开相应外设的时钟:GPIOA RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitStructure.GPIO_Pin = LED_ALL; //初始化GPIOA,用于驱动LED GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速度为50MHz GPIO_Init(GPIOA, GPIO_InitStructure); while (1) { GPIO_Write(GPIOA, chLsd); Delay(10); chLsd=1; j++; if(j0x05) {chLsd=0XFE; j=0; } } } void Delay(nCount) { for(

文档评论(0)

1亿VIP精品文档

相关文档