&=等价于GPIOB->CRL = GPIOB->CRL & 0xFFFFFFF0,GPIO口B的低8个端口控制寄存器CRL的低4个bits清为0,其余bits不变。
学好编程:
1、明确学习目的,学习编程对大多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位。
2、从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。
3、知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
GPIO的功能描述每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
GPIO端口的每个位可以由软件分别配置成多种模式。
-输入浮空
-输入上拉
-输入下拉
-模拟输入
-开漏输出
-推挽式输出
-推挽式复用功能
-开漏复用功能
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
下图给出了一个I/O端口位的基本结构。一、gpio用途
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。
不同系统间的GPIO的确切作用不同。通用常有下面几种:
1输出值可写(高=1,低=0)。一些芯片也可以选择驱动这些值的方式,以便支持“线-或”或类似方案(开漏信号线)。
2输入值可读(1,0)。一些芯片支持输出管脚回读,这在线或的情况下非常有用(以支持双向信号线)。GPIO控制器可能具有一个输入防故障/防反跳逻辑,有时还会有软件控制。
3输入经常被用作中断信号,通常是边沿触发,但也有可能是电平触发。这些中断可以配置为系统唤醒事件,从而将系统从低功耗模式唤醒。
4一个GPIO经常被配置为输入/输出双向,根据不同的产品单板需求,但也存在单向的情况。
5大多是GPIO可以在获取到spinlock自旋锁时访问,但那些通过串行总线访问的通常不能如此 *** 作(休眠的原因)。一些系统中会同时存在这两种形式的GPIO。
6在一个给定单板上,每个GPIO用于一个特定的目的,如监控MMC/SD卡的插入/移除,检查卡写保护状态,驱动LED,配置发送器,串行总线位拆,触发一个硬件看门狗,触发一个开关之类的。
二、GPIO使用方法
要使用GPIO,系统首先要分配一个GPIO,使用gpio_request() 为系统分配一个GPIO。
接下来要做的一件事是标示GPIO的方向,通常在使用GPIO建立一个platform_device时(位于单板的setup代码中)。
返回0标示成功,或是一个负的errno错误码。它应该被检查,因为get/set调用没有错误返回,且可能会有错误配置。你通常应该在线程上下文中使用这些调用。虽然如此,对于spinlock-safe的GPIO,在tasking使能之前使用也是可以的,作为一个早期的单板建立。
对于输出GPIO,value参数提供了初始输出值。这有助于避免系统启动过程中的信号干扰。
为了与GPIO早期的接口兼容,设置一个GPIO的方向,隐性要求申请GPIO。这个兼容性从可选的gpiolib架构中移除了。
为了与GPIO早期的接口兼容,设置一个GPIO的方向,隐性要求申请GPIO。这个兼容性从可选的gpiolib架构中移除了。
如果GPIO号码无效或是指定的GPIO不能使用对应模式 *** 作的话,设置方向会失败。依靠boot固件设置好GPIO的方向通常不是一个好主意,因为boot的功能可能没有通过验证(除了boot linux)。(类似的,单板setup代码可能需要将管脚复用为一个GPIO,和配置为合适的上拉/下拉)你的问题敢不敢罗列一下啊!!
1、它是怎么把PC11、PC12清零的?
答:每4个位对应一个IO引脚,16个IO引脚就是64位。CRL的32位负责控制低8个IO引脚,CRH的32位负责控制高8个IO引脚。你贴出来的图是CRL,应该看CRH的。
2、PC1中的PC是什么意思?
答:写PC是GPIOC的意思,以前51都是PA\PB\PC……可见注释的人跟LZ一样懒的写GPIOC。
3、stm32一共有几个IO端口?A~G如果是每个IO口的名称的话,图中应该有8个IO,可是A~G只有7个,第八个呢?
答:不同STM32型号有不同数目的IO端口,具体看芯片手册。
一个IO口对应16个IO引脚,你说的那个是8个IO引脚。GPIOA、GPIOB……这些IO口都有16个IO引脚……
4、CRH控制高8位,CRL控制低8位,这个“高低”什么意思?
答:高8位就是8~15的IO引脚,低8位就是0~7的IO引脚。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)