历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2019年08月12日 | STM32-(05):GPIO原理与操作

2019-08-12 来源:eefocus

在这里插入图片描述

简单分析:红色框主要是输出电路(O),蓝色框主要是输入电路(I);关于输出电路,可以通过写位设置/清除寄存器来改变输出数据寄存器,或者直接读写输出数据寄存器,有这两种方式,继而通过I/O端口输出。如果打开了复用功能,就走复用的通道,输出控制就是一个锁存器。若寄存器写入1,输出控制的上方输出1,则CMOS管P-MOS导通,CMOS管N-MOS不导通,输出高电平,若寄存器写入0,输出低电平。关于输入电路,I/O进来有两个保护二极管,防止电压过高,再进入,有两个电阻,上拉和下拉,当不拉时为浮空输入,一般用于模拟输入,经过施密特触发器,如果用作GPIO口,将值写入寄存器,如果用作复用,走复用通道。


GPIO功能描述 端口配置表+输出模式位

开漏输出就是P-MOS上方不接

推挽输出就是两个CMOS都正常

如图所示,涉及到四个位来决定输入输出

端口配置低寄存器 CRL 端口配置高寄存器 CRH

0-7一个八组,控制8个GPIO, 8-15另外八组,控制另外8个GPIO,GPIOX的 x的取值范围为(A-E)

端口输入数据低寄存器 IDR 端口输出数据高寄存器 ODR

输入、输出数据寄存器都只用到1位(一个端口16个引脚),只需要16位,所以高16位保留

端口位设置/复位寄存器 BSRR 端口位复位寄存器 BRR 端口配置锁定寄存器 LCKR


设置I/O口的引脚,输出电平。


int  main(void)

{

// GPIOA->CRL = 0x00; //CRL 代表低八个引脚(0-7)

// GPIOA->CRH = 0xffffffff; //CRH 代表高八个引脚(8-15)

/*1.设置GPIOA组的引脚的工作模式;应该是输出模式,输出模式应该是通用GPIO(非复用),假设使用的是GPIOA.0、GPIOA.1

这两个引脚应该设置为推挽输出(查看端口位配置表<表11>:CNF1设为0、CNF0设为0)、速度50Mhz(查看端口位配置表<表11>:

MODE1、MODE0设为1),继续查看 端口配置低寄存器(GPIOx_CRL),一共32位(0-31),0-3控制GPIOA的第一个引脚,

4-7控制GPIOB的第二个引脚,0-3内是MODE0、MODE1、CNF0、CNF1,需要设置对应位已达到推挽输出与速度的要求。

*/

GPIOA->CRL = 0x33; //CRL是端口配置寄存器


//2.在相应的引脚输出一个电平


GPIOA->ODR = 0x0; //00 设置这两个引脚输出两个低电平

GPIOA->ODR = 0x3; //11 设置这两个引脚输出两个高电平

return(1);

}


通过改变GPIOA的第8位,使第0位状态跟着改变


int  main(void)

{

// 1、PA.0输出、50Mhz   PA.8输入(PA.0用到CRL, PA.8用到CRH)

GPIOA->CRL = 0x03; //PA.0输出、50Mhz

GPIOA->CRH = 0x04; //PA.8输入(选择浮空输入,因为模拟输入与复用输入不经过输入数据寄存器)

// 2、PA.0 == PA.8

while(1)

{

//第8位输入影响第0位输出

if((GPIOA->IDR & 0x0100) == 0x0100) //若成立,则第八位为1 (IDR 输入数据寄存器)

GPIOA->ODR = 0x01; //则相应第0位也置为1 (ODR 输入数据寄存器)

else

GPIOA->ODR = 0x00;

}

return(1);

}


GPIOA.8 ~ GPIOA.15 引脚输入状态影响GPIOA.0 ~ GPIOA.7 引脚输出状态


方案一


int  main(void)

{

// 1、PA.0 ~ PA.7 输出、50Mhz   PA.8 ~ PA.15 输入(PA.0用到CRL, PA.8用到CRH)

GPIOA->CRL = 0x33333333; //PA.0 ~ PA.7 输出、50Mhz

GPIOA->CRL = 0x44444444; //PA.8 ~ PA.15 输入(选择浮空输入,因为模拟输入与复用输入不经过输入数据寄存器)

// 2、PA.8 ~ PA.15 引脚输入状态影响PA.0 ~ PA.7 引脚输出状态

while(1)

{

//则第八位为1 (IDR 输入数据寄存器),则相应第0位也置为1 (BSRR为 端口位设置寄存器,BRR位复位寄存器)

if((GPIOA->IDR & 0x0100) == 0x0100) GPIOA->ODR = GPIOA->ODR | 0x01;

else GPIOA->ODR = GPIOA->ODR & (~0x01);

if((GPIOA->IDR & 0x0200) == 0x0200) GPIOA->ODR = GPIOA->ODR | 0x02;

else GPIOA->ODR = GPIOA->ODR & (~0x02);

if((GPIOA->IDR & 0x0400) == 0x0400) GPIOA->ODR = GPIOA->ODR | 0x04;

else GPIOA->ODR = GPIOA->ODR & (~0x04);

if((GPIOA->IDR & 0x0800) == 0x0800) GPIOA->ODR = GPIOA->ODR | 0x08;

else GPIOA->ODR = GPIOA->ODR & (~0x08);

if((GPIOA->IDR & 0x1000) == 0x1000) GPIOA->ODR = GPIOA->ODR | 0x10;

else GPIOA->ODR = GPIOA->ODR & (~0x10);

//………………以此类推

}

return(1);

}


方案二


int  main(void)

{

// 1、PA.0 ~ PA.7 输出、50Mhz   PA.8 ~ PA.15 输入(PA.0用到CRL, PA.8用到CRH)

GPIOA->CRL = 0x33333333; //PA.0 ~ PA.7 输出、50Mhz

GPIOA->CRL = 0x44444444; //PA.8 ~ PA.15 输入(选择浮空输入,因为模拟输入与复用输入不经过输入数据寄存器)

// 2、PA.8 ~ PA.15 引脚输入状态影响PA.0 ~ PA.7 引脚输出状态

while(1)

{

//则第八位为1 (IDR 输入数据寄存器),则相应第0位也置为1 (BSRR为 端口位设置寄存器,BRR位复位寄存器)

if((GPIOA->IDR & 0x0100) == 0x0100) GPIOA->BSRR = 0x01; //第0位置1;

else GPIOA->BRR = 0x01; //第0位清零

if((GPIOA->IDR & 0x0200) == 0x0200) GPIOA->BSRR = 0x02;

else GPIOA->BRR = 0x02;

if((GPIOA->IDR & 0x0400) == 0x0400) GPIOA->BSRR = 0x04;

else GPIOA->BRR = 0x04;

if((GPIOA->IDR & 0x0800) == 0x0800) GPIOA->BSRR = 0x08;

else GPIOA->BRR = 0x08;


//………………以此类推

}

return(1);

}

//若使程序简便,可使用#define GPIOA1 GPIOA->BSRR #define GPIOA0 GPIOA->BRR


推荐阅读

史海拾趣

泰科天润(GPT)公司的发展小趣事

机顶盒,全称数字视频变换盒,是连接电视与外部信号源的重要设备,其专业性与科普性均不容忽视。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们承担着将各种信号源转换为电视可识别并播放的格式的重要任务。

机顶盒的核心功能在于接收、解码和显示。它能接收来自有线电缆、卫星天线、宽带网络及地面广播等多种传输介质的数字电视信号,并通过内置的解调器和解码器,将这些信号转换为电视能够播放的视频和音频流。这一过程中,机顶盒展现了其强大的技术实力,确保用户能够享受到高质量的视听体验。

随着技术的发展,机顶盒不断进化。从最初的模拟频道增补器、解码器,到如今支持高清、4K乃至8K超高清播放的智能网络机顶盒,机顶盒的每一次升级都带来了更加丰富的内容选择和更加便捷的使用体验。同时,网络机顶盒的出现更是将电视与互联网紧密相连,使得用户能够通过电视屏幕浏览网页、观看在线视频、下载应用程序、享受交互式娱乐等多元化服务。

此外,机顶盒还具备强大的扩展性和可定制性。通过搭载不同的软件和硬件设备,机顶盒可以满足不同用户的个性化需求,如家庭影院功能、社交媒体互动、语音控制等。这些功能的加入不仅提升了机顶盒的实用性,也使其成为了现代家庭娱乐的重要组成部分。

综上所述,机顶盒作为连接电视与外部世界的桥梁,其专业性与科普性在不断提升中。随着技术的不断进步和市场的不断扩大,机顶盒将继续为用户带来更加优质、便捷、智能的视听体验。

AD Semiconductor公司的发展小趣事

AD Semiconductor是一家专注于模拟和数字混合信号集成电路的设计、生产和销售的公司。以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: AD Semiconductor成立于1990年,总部位于美国马萨诸塞州。公司的创始人具有丰富的集成电路设计和制造经验,致力于开发高性能、高可靠性的模拟和数字混合信号芯片。初期,公司主要专注于功率管理、数据转换和信号处理等领域。

  2. 技术创新与产品推出: AD Semiconductor在技术创新方面取得了多项突破,不断推出具有领先性能的芯片产品。公司的产品涵盖了模拟转换器、运算放大器、数据采集系统、功率管理器等多个系列,广泛应用于通信、工业控制、汽车电子等领域。

  3. 市场拓展与国际化发展: 随着产品线的不断完善和市场认可度的提升,AD Semiconductor逐步拓展了国内外市场。公司在美国、中国、欧洲等地设立了销售和技术支持中心,与全球各地的客户建立了合作关系。通过与国际合作伙伴的合作,AD Semiconductor的产品远销至全球各地,赢得了广泛的市场认可。

  4. 并购与战略合作: 为了加强自身的技术实力和市场地位,AD Semiconductor进行了一系列的并购和战略合作。其中最重要的是2015年,AD Semiconductor收购了一家专注于RF和微波集成电路设计的公司,进一步拓展了在无线通信领域的业务布局。

  5. 持续创新与未来展望: AD Semiconductor致力于持续创新,不断推出符合市场需求的新产品和解决方案。公司将继续加强技术研发投入,提升产品性能和稳定性,以满足客户在不断变化的市场需求。未来,AD Semiconductor将继续致力于成为模拟和数字混合信号领域的领先企业,并为全球客户提供更加优质的产品和服务。

Hifn Inc公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们不仅限于接收和转换电视信号,还具备丰富的网络交互功能。

机顶盒的核心功能在于接收并解码来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,将其转换成适合在电视机上播放的格式。这一过程包括接收、解码和显示三个主要步骤,确保了用户能够享受到高清乃至4K的超高清画质和震撼音效。此外,机顶盒还提供了诸如电子节目指南、因特网网页浏览等增值服务,极大地丰富了用户的观看体验。

随着技术的不断进步,机顶盒正朝着智能化、多功能化方向发展。例如,智能推荐算法能够根据用户的观看历史和偏好,提供个性化的节目推荐;语音识别技术则让用户能够通过语音指令控制机顶盒,实现更加便捷的操作体验。同时,机顶盒还支持家庭影院功能,让用户在家中就能享受到电影院般的视听效果。

总的来说,机顶盒作为连接电视与外部信号源的桥梁,不仅提升了电视节目的观看体验,还通过丰富的网络交互功能为用户提供了更加广泛的内容和娱乐选择。随着技术的不断发展和用户需求的日益多样化,机顶盒将继续在家庭娱乐领域发挥重要作用。

德丰(DEFOND)公司的发展小趣事

德丰电创科技股份有限公司(简称“德丰电创”)自1984年成立以来,从一个东莞的洪梅电器厂逐步发展为一家专业从事开关制造到电子电路模块、机电一体化集成模组等多元化产品的大型港资实业公司。公司凭借多年的产品研发和高端制造经验,以及完善的供应链管理体系,成功在家用电器、电动工具、汽车等多个市场领域占据一席之地。德丰电创的发展历程充满了不断的技术创新和市场扩张,其产品质量和服务得到了全球客户的广泛认可。

DURATOOL公司的发展小趣事

随着环保意识的不断提高,绿色、环保、低碳已成为全球经济发展的重要趋势。DURATOOL公司积极响应这一趋势,致力于研发和生产绿色环保的电子工具产品。公司采用环保材料和工艺生产产品,减少了对环境的污染和破坏。同时,公司还积极开展环保宣传和公益活动,引导消费者树立绿色消费观念。这些举措不仅提升了DURATOOL公司的社会形象,也为其在未来的市场竞争中赢得了先机。

High Tech Chips Inc公司的发展小趣事

随着全球经济的不断发展,DURATOOL公司意识到单一市场已无法满足其长远发展需求。因此,公司制定了一系列国际化战略,积极开拓海外市场。通过与国外知名企业的合作,DURATOOL公司成功将其产品线扩展到全球多个国家和地区。同时,公司还积极参加国际展会和技术交流活动,提升品牌知名度和影响力。这些举措不仅为DURATOOL公司带来了丰厚的经济回报,也为其在国际市场上树立了良好的企业形象。

问答坊 | AI 解惑

小经验:用AVR定时器输出做升压驱动LCD

当用3.6V的锂电为AVR供电时,很多LCD就无法显示了.但LCD的耗电很小,完全可以用AVR的I/O脚驱动 如图,VDD可以输出5.63V的电压为LCD供电。负压也可以用类似的办法产生。 …

查看全部问答>

IPerf在WinCE ARMV4I下运行提示缺少component或相关libraries

想要测Wi-Fi模块的带宽, 在网上Down了一个IPerf源代码,板子上用的是ARMV4I, 编译器选ARMV4I, Build后,把iperf.exe copy到板子上运行, 错误提示:\"Cannot find \'IPERF\' (or one of its components). Makesure the path and filename are corr ...…

查看全部问答>

MSM5100芯片开发

请问各位大虾,有谁知道高通MSM5100芯片用什么语言编程么?老板要用这个芯片,可是我手上一点资料都没有,哪位网友能提供一些帮助,在下感激不尽!…

查看全部问答>

理解FFT图

本帖最后由 dontium 于 2015-1-23 13:22 编辑 作者:Bonnie C. Baker, 德州仪器 (TI)   关键词:模拟电路设计、转换器、ADC、工业应用、医疗电子、Op Amp、系统设计、工程教育、物理验证与分析、信号完整性、设计方法   您可以通过 ...…

查看全部问答>

有关.cio的

ccs编译的时候报warning 里面有个creating output section .cio without SECTIONS specification这里面的.cio是什么东西啊…

查看全部问答>

MSP430F5xxx 在高速公路不停车收费系统(ETC)中的应用

摘要 本文探讨了使用MSP430F5xxx实现ETC系统中实时HDLC编解码的方法。MSP430F5xxx是TI公司MSP430家族最新产品序列,采用先进的0.18工艺,1MIPS消耗的电流低到了惊人的160uA。同时,F5xx产品都配备了高效灵活的DMA模块,对16bit数据进行搬移只需 ...…

查看全部问答>

关于差分电路

如图所示,下面的电阻是个100M的电阻,上面的电压为500V,差分电路测量采样电阻两端的电压,如果两侧的地不是同一个地能否实现精确的测量,如果不可以的话有没有其他方案可以提供啊?谢谢各位大侠,主要是想检测电流的大小~…

查看全部问答>

【易电源试用】纳米模块LMZ10501

以前确实抽不出时间搞这个。现在按照计划开始试用了。 由于测试条件不理想,图片嘛,这里就不贴了。 今天只测试了LMZ10501的部分特性,且是在输出1.8V下的。以后还要继续作其它测试。 一、空载电流 测试条件:输入5V,      &n ...…

查看全部问答>

求各位大神一个5529的数字时钟程序,有急用啊!

RT.求各位大神一个5529的数字时钟程序,有急用啊!在此感激不尽啊!有好心的朋友请发到463355239@qq.com。感激不尽啊…

查看全部问答>

要找几个接线端子,网上查不到,求助啊!!!

型号如下: 3针双排PHOENIX母端  MCD 1,5/3-G1F-3,81 3针      PHOENIX公端  FMC 1,5/3-STF-3,81 2针      PHOENIX母端  MC 1,5/2-GF-3,81 !! 有购买链接的发下,或 ...…

查看全部问答>