历史上的今天
返回首页

历史上的今天

今天是:2025年08月06日(星期三)

正在发生

2019年08月06日 | STM32 IO寄存器操作

2019-08-06 来源:eefocus

STM32的IO端口有八种模式:


1、输入浮空         5、开漏输出


2、输入上拉         6、推挽输出


3、输入下拉         7、推挽复用


4、模拟输入         8、开漏复用


每个IO口都有七个寄存器来控制:


CHL、CHR        :端口配置寄存器(32位)


IDR、ODR        :数据寄存器(32位)


BSRR                :置位/复位寄存器(32位)


BRR                  :复位寄存器(16位)


LCKR                :所存寄存器(32位)


其中,比较常用的IO端口寄存器为CRL,CRH,IDR,ODR


低配置寄存器CRL:

该寄存器复位值为0x4444 4444。即复位后IO口默认为浮空输入模式。STM32的CRL寄存器控制着每组IO端口的低8位。每4个位(2位MODE,2位CNF)即控制对应IO端口的输入输出模式和端口速度的配置。常用的配置有:0X0(模拟输入,ADC使用),0X3(推挽输出,50M速率),0X8(上下拉输入),0XB(复用输出,50M速率)。


CRH与CRL功能相同,CRH控制高八位(8-15),CRL控制低八位(0-7)。


例:想要设置PTC11为上拉输入,PTC12为推挽输出:

 


    GPIOC->CRH &= 0XFFF0 0FFF;  //清除该两位设置而不影响其他位

 

    GPIOC->CRH  |=  0X0003 8000; //C11输入,C12输出

 

    GPIOC->ODR  =   1<<11;//C11上拉

IDR是端口输入数据寄存器,只用了低16位,该寄存器是只读寄存器,并且只能以16位形式读出。

要想知道某个IO口的状态时,只需读该寄存器,看某位的状态即可。


ODR为端口输出数据寄存器,只用了低16位,可读写,读出来的状态可作为IO口输出状态的判断,写数据则改变对应IO端口的电平状态。


完整IO口初始化示例:


void LED_Init(void){

 

    RCC->APB2ENR |= 1<<2;    //使能PTA时钟

 

    RCC->APB2ENR |= 1<<5;    //使能PTD时钟

 

    GPIOA->CRH&=0XFFFF FFF0; //清空PA8设置

 

    GPIOA->CRH|=0X0000 0003; //设置PA8推挽输出

 

    GPIOA->ODR|=1<<8;  //PA8输出高

 

    GPIOD->CRL&=0XFFFF F0FF;//清空PD2设置

 

    GPIOD->CRL|=0X0000 0300;//设置PD2推挽输出

 

    GPIOD->ODR|=1<<2;//PD2输出高

 

}

需注意,任何外设在初始化之前,都需要配置其时钟。在上例中,APB2ENR为APB2总线上的外设时钟使能寄存器。

由上图所示,GPIOA和GPIOD的端口时钟分别在第二位和第五位,这两位置一即可使能这两个端口的时钟

推荐阅读

史海拾趣

宝乘(baocheng)公司的发展小趣事

随着产品质量的提升和技术的不断创新,宝乘公司开始积极拓展市场。公司与多家知名企业建立了战略合作关系,共同推动半导体功率器件在LED照明、电源、消费类电子等多个领域的应用。同时,宝乘还积极参加国内外电子行业的展览和交流活动,与同行交流学习,不断提升自身的竞争力。

BB公司的发展小趣事

在成立后的几年里,BB公司逐渐在国内市场站稳了脚跟。然而,创始人并没有满足于此,他看到了更广阔的国际市场。1961年,BB公司首次进入国际市场,凭借其高品质的产品和专业的服务,迅速赢得了国际客户的青睐。此后,BB公司不断加快国际化步伐,先后在英国和日本设立子公司,进一步扩大了市场份额。这一系列的国际化举措,不仅提升了BB公司的知名度,也为其带来了丰厚的回报。

Ferraz Shawmut(Mersen)公司的发展小趣事

2010年,Ferraz Shawmut正式更名为Mersen。这一更名标志着公司进入了一个新的发展阶段。Mersen继续秉承Ferraz Shawmut的技术创新和市场拓展精神,不断推出符合市场需求的新产品和技术解决方案。同时,公司也加大了对研发和创新的投入力度,以保持其在电气保护领域的领先地位。

Altera (Intel)公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Mersen面临着越来越多的挑战。然而,公司始终坚持以客户为中心的理念,通过深入了解客户需求和市场趋势,不断推出符合市场需求的新产品和技术解决方案。同时,公司也加强了与全球合作伙伴的合作与交流,共同应对市场挑战并推动行业发展。

以上五个故事概述了Ferraz Shawmut(现更名为Mersen)在电子行业中的关键发展历程。通过不断创新、全球扩张和积极应对市场挑战,公司成为了电气保护领域的领先企业。

CAMBION公司的发展小趣事

CAMBION公司自成立以来,始终将技术创新作为核心驱动力。在早期,公司研发团队成功开发了一款具有革命性的芯片技术,显著提升了电子设备的处理速度和能效。这一技术迅速在行业内引起关注,为CAMBION赢得了大量订单和合作伙伴。随着技术的不断完善和应用范围的扩大,CAMBION逐渐在电子行业中崭露头角。

Gumstix公司的发展小趣事
检查压敏元件是否老化或受到污染,必要时更换新的压敏元件。同时,也可以考虑调整电路参数以提高灵敏度。

问答坊 | AI 解惑

电子万年历我成功调试过

http://blog.163.com/li_j920/edit/ 还的硬件电路,你们要我会给你们的。…

查看全部问答>

机动车尾号限行提示器

机动车尾号限行提示器…

查看全部问答>

WinCE中如何调用ARM汇编指令?

RT,我在做GBA模拟器,想直接调用ARM汇编指令,利用ARM9模拟ARM7-TDMI,但是如果可以直接调用ARM汇编指令模拟就很简单了,请问需要什么平台和设备?因为主要是在Windows Mobile上面用,所以希望能简单一点的…

查看全部问答>

请教 关于上层过滤器驱动程序的问题

请问如何在上层过滤驱动实现指定的IRP拦截,比如,禁止C:\\helloworld.exe以外的一切程序写G:\\盘? 我现在用DriverStudio生成了一个upper filter,那么应该如何修改代码呢?…

查看全部问答>

想找个师傅带一下【上海,武汉均可】

要毕业了没有工作经验,想找一个师傅教一下。毕业课题是无线点菜机,辅导我做一下。…

查看全部问答>

求助:MSP430执行_EINT()命令进入中断函数

大家好,我用的MSP430F5X系列的芯片。在IAR中执行EINT()命令时,这应该是CPU寄存器打开全局中断,为什么我单步运行的时候走到这里后会进入中段函数?  困惑了多日了,望各位大侠们能帮帮我。不甚感激。。。…

查看全部问答>

51系列单片机驱动彩色液晶显示模块

51系列单片机驱动彩色液晶显示模块 关键字:51系列单片机,驱动,彩色液晶,显示,模块 其核心电路均采用大规模可编程逻辑器件设计,全硬件实现,性能稳定可靠,产品一致性好。采用简单的并行总线方式与51 单片机、AVR、DSP、PIC、ARM等CPU 直接 ...…

查看全部问答>

DSP应用系统设计

我帮老师扫描的第三本书…

查看全部问答>