历史上的今天
返回首页

历史上的今天

今天是:2025年01月05日(星期日)

正在发生

2021年01月05日 | 关于STM32中的GPIO位设置的相关纪要与总结

2021-01-05 来源:eefocus

1.在对GPIOx_ODR的个别位进行编程时,软件不需要禁止中断。

2.GPIO具有锁定机制。主要是在一些关键引脚上为了防止程序跑掉而引起不必要的后果。


3.GPIO的库函数问题,

GPIO_SetBits:置所选端口的一个或者多个位高;

GPIO_ResetBits:相应的设置相应的一个或者多个位高;

GPIO_Init:设置A,B,C,D,E端口的任一个I/O的输入输出配置信息,初始化I/O芯片;

GPIO_Pin:设置带选择的引脚号(GPIO_Pin_1:选中1引脚);

GPIO_Speed:设置所选中的引脚的频率(GPIO_Speed_10MHz);

GPIO_Mode:设置所选中的引脚的工作状态,做以上几步都必须先定义出引脚;

(STM32F系列的芯片的I/O口有8中工作状态,这里就不做太多的描述,其中是主要包括4输入和4输出,重要的是每一个I/O口只能是这8种状态中的一种)

例说以上的GPIO口的基本设置

例:配置端口A的0、1、6引脚为推免输出,并且最大的速度为10MHz。

GPIO_InitTypeDef  GPIO_InitStructure   //定义结构体

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_pp;

GPIO_Init(GPIOA,&GPIO_InitStructure);  //定义设置的是A口,并且取结构体地址。



函数GPIO_SetBits的功能主要是置位所选定的端口的一个位或者多个位为高。

这里使用的是函数头,具体函数

例:设置外设端口PA12,PA14,PA15为高电平。

GPIO_SetBits(GPIOA,GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15)



GPIO_ResetBits的功能是设置所选定的端口的一个或者多个选定的位为低。

例:要清除外设数据端口PD2,PD10,PD15。

GPIO_Resetbits(GPIOD,GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin15);

一般来说,需要将某位设置为低,也就是要清除该位。

 

GPIO_WriteBit的功能是设置或者清除所选端口的待定位。

该函数具有三个输入参数,通过第三个输入参数来定义是设置还是清除位。

例:置位外设数据端口PE2为高|清除外设端口PE1.

GPIO_WriteBit(GPIOE,GPIO_Pin_2,Bit_SET);

GPIO_WriteBit(GPIOE,GPIO_Pin_1,Bit_RESET);

 

GPIO_Write的功能是向指定的外设端口写入数据。

例:向外设端口C写入0X3A4B.

GPIO_Write(GPIOC,0X3A4B);

 

GPIO_ReadOutputDataBit的功能是读取指定外设端口的指定以及你叫的输出值。

例:需要读取输出引脚PB14的值。

u8 ReadValue; //表示的是ReadValue是8位的数据

ReadValue = GPIO_ReadOutputDataBit(GPIOB.GPIO_Pin_14);

 

GPIO_ReadOutputData的功能是读取指定外设端口的输出值,是16位的数据

例:需要读取外设端口C的值。

u16 ReadValue;

Readvalue = GPIO_ReadOutputData(GPIOC);

 

GPIO_ReadInputDataBit的功能是读取指定外设端口的指定引脚的输入值每次读取1位,高电平为1,低电平为0.

例:需要读取外设端口PA7引脚的值。

u8 ReadValue;//是一个8位的数据

ReadValue = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);

//如果是高电平就返回1,低电平就返回0.

 

GPIO_ReadInputData的功能是读取外设短裤输入的值,是一个16为的数据。

例:需要读取外设D口的I/O的值。

u16 ReadValue;

ReadValue = GPIO_ReadInputData(GPIOD);

 

总结:(1)如果是端口设置成下拉输GPIO_ReadInputDataBit,GPIO_ReadOutputDataBit,可以区分高低电平。

(2)如果是端口设置成开漏输出GPIO_ReadInputDataBit,GPIO_ReadOutputDataBit,GPIO_ReadInputDataBit,GPIO_ReadOutputDataBit可以区分高低电平。

(3)如果是端口设置成上拉输入GPIO_ReadOutputDataBit只能读出高电平。按键没按或者按下读的都是高电平。

推荐阅读

史海拾趣

浙江凡华(FANHAR)公司的发展小趣事

对于计数型10键键盘编码译码显示电路,网友可能会有多个方面的问题,以下是一些常见问题及其回答:

一、设计基础与原理

问题1:计数型10键键盘编码译码显示电路的基本组成是什么?

回答:计数型10键键盘编码译码显示电路主要由三部分组成:键盘编码电路、译码电路和显示电路。键盘编码电路负责将按键的输入转换为对应的编码信号;译码电路则将该编码信号还原为可识别的信息或数据;最后,显示电路将译码后的信息以可视化的方式呈现出来。

问题2:编码和译码在数字电路中的作用是什么?

回答:编码是将信息或数据转换为二进制代码的过程,以便在数字系统中进行监测、控制、传输等操作。而译码则是编码的逆过程,即将二进制代码还原为原始的信息或数据,以便进行显示或进一步处理。在计数型10键键盘编码译码显示电路中,编码和译码是实现按键输入到显示输出的关键步骤。

二、技术实现细节

问题3:如何实现10键键盘的编码?

回答:实现10键键盘的编码通常可以采用优先编码器。优先编码器能够识别多个输入信号中的最高优先级信号,并将其转换为对应的编码输出。在10键键盘中,可以将10个按键的输入信号接入优先编码器的输入端,通过编码器的内部逻辑处理,得到按键对应的编码输出。

问题4:译码器如何选择以满足显示需求?

回答:译码器的选择应根据显示需求来确定。对于计数型10键键盘编码译码显示电路,如果显示的是十进制数字,则应选择能够处理十进制数的译码器,如74LS48等。此外,还需要考虑译码器的输入位数、输出类型(如共阳极或共阴极)以及驱动能力等因素,以确保译码器能够满足显示电路的要求。

问题5:显示电路如何设计以兼容不同显示器?

回答:显示电路的设计应兼顾译码器、驱动器和显示器三部分。首先,根据译码器的输出选择合适的驱动器来驱动显示器。驱动器的选择应考虑显示器的类型(如七段数码管、LED点阵等)、工作电压和电流等因素。其次,根据显示器的特性设计显示电路,包括确定显示方式(如静态显示或动态显示)、设置显示亮度等。最后,通过连接译码器、驱动器和显示器,实现按键输入到显示输出的完整电路。

三、常见问题与解决方案

问题6:如何解决按键冲突问题?

回答:按键冲突是指多个按键同时按下时,电路无法正确识别所有按键的状态。在计数型10键键盘编码译码显示电路中,可以通过采用优先编码器来避免按键冲突问题。因为优先编码器能够识别最高优先级的按键信号,并忽略其他低优先级的按键信号。此外,还可以通过软件算法来进一步处理按键冲突问题,如设置按键去抖动时间、检测按键按下和释放的时间差等。

问题7:如何提高电路的抗干扰能力?

回答:提高电路的抗干扰能力可以从多个方面入手。首先,选择具有良好抗干扰性能的元器件和电路布局方式;其次,在电路设计中加入滤波、去耦等电路来抑制干扰信号;最后,通过软件算法来识别和排除干扰信号的影响。此外,还可以采用屏蔽、接地等外部措施来进一步提高电路的抗干扰能力。

以上是对计数型10键键盘编码译码显示电路中网友可能提出的问题及其回答的总结。在实际应用中,还需要根据具体需求和条件进行灵活调整和优化。

诚芯微(CXW)公司的发展小趣事

在2017年,诚芯微被认定为国家高新技术企业,这是对公司技术实力和创新能力的高度肯定。获得这一荣誉后,诚芯微进一步加大了研发投入,加强了与高校和科研机构的合作,推动了公司技术的持续创新。同时,公司还扩大了产能,优化了供应链管理,提升了市场竞争力。

粤翔(FlyWin)公司的发展小趣事
根据需求分析结果,选择合适的电压监测元件、电源管理元件、储能元件和保护元件。
Dongguan City Niuhang Electronics Co.LTD公司的发展小趣事

在技术创新的基础上,Dongguan City Niuhang Electronics Co.LTD开始积极拓展市场。公司先后在安徽省池州市、江苏省扬州市和宿迁市等地设立生产基地,形成了覆盖全国的销售网络。同时,公司还加强品牌建设,通过参加行业展会、举办技术研讨会等方式,提升品牌知名度和影响力。随着市场的不断扩大,公司的销售业绩也实现了快速增长。

Hammond公司的发展小趣事

为了进一步提升技术水平和市场竞争力,Dongguan City Niuhang Electronics Co.LTD积极开展国际合作与交流。公司与多家国际知名半导体企业建立了紧密的合作关系,共同开展技术研发和市场拓展。通过与国际同行的交流与合作,公司不仅学到了先进的技术和管理经验,还拓宽了国际市场渠道,为公司的长远发展奠定了坚实基础。

Advanced Semiconductor, Inc.公司的发展小趣事

Advanced Semiconductor, Inc. (简称ASI) 成立于XXXX年,由一群热衷于半导体技术创新的工程师和科学家创立。在创立初期,ASI专注于研发高性能的半导体芯片,以满足当时市场对更快、更稳定电子产品的需求。公司凭借其独特的技术和创新的理念,很快在半导体行业中崭露头角,吸引了众多投资者的关注。

问答坊 | AI 解惑

关于DSP的EMIF

DSP芯片访问片外存储器时可以通过外部存储器接口EMIF,但是C54XX系列芯片没有EMIF接口,怎么办?…

查看全部问答>

AD603资料(全)

本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 AD603的中文资料,分享来的,再与大家分享  …

查看全部问答>

高精度实时时钟2400资料及驱动下载

希望有用到的同道中人能够用到哦,…

查看全部问答>

CE下做界面那个效率高点?

用C#写了个界面,觉得不太好,页面切换比较慢。非托管的MFC用起来怎么样,有没人用过的?…

查看全部问答>

初学者问题

本人是学生,没有钱买板子,我想知道怎么在自己的电脑上仿真自己写的程序呢?…

查看全部问答>

AX88796B网卡芯片 发送中断问题

各位大虾,我用的是ATMELR40008芯片+AX88796B网卡芯片的板子。由于网络测试需要,在原来只有接受中断的情况下加了接受中断。我网卡初始化的时候,我们只将IMR寄存器的接受中断打开既复制0x11。在发送某种报文的时候再将发送中断打开。在这种情况单 ...…

查看全部问答>

如果主机时windows,单板是vxWorks,在单板用socket能否可以和主机进行通信,请指教。谢谢

如果主机时windows,单板是vxWorks,在单板用socket能否可以和主机进行通信,有什么特殊要领,请多多指教,较急。…

查看全部问答>

调用CeCreateDatabaseWithProps出现link错误!高手帮忙

我在evc上调用CeCreateDatabaseWithProps要创建一个在mount出来的vol上创建db, 但link的时候出现如下错误: error LNK2019: unresolved external symbol CeCreateDatabaseWithProps referenced in function \"int __cdecl CreateDB(unsigned short ...…

查看全部问答>

问下关于formality的问题~~关于verify过程

用formality验证RTL代码和DC综合出的代码~verify的时候进度从昨天晚上到今天一直卡在95%的进度动不了了~请教有没有大神遇到过这种情况?是确实卡住了还是可能花的时间比较长,应该多等等??在redhat的终端里的消息如下:Status:  Verify ...…

查看全部问答>

在医疗应用领域中的C6474多核处理器

$(\'swf_Kt4\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMzI4MzkwNTA4/v.sw ...…

查看全部问答>