GPIOx(x=A,B,C,D,E,H)引脚配置需要几个方面: (配例的工程函数是可以到官网上下载使用手册的)
1,首先肯定是要将相应的引脚口挂在到的AHB/APB的时钟使能,即配置RCC_AHBENR寄存器。
GPIOC的使能位在BIT2 则 #DEFINE GPIOCEN (Unit32_t)0x0x00000004
RCC的起始地址为0x4002 3800
#define PERIPH_BASE ((uint32_t)0x40000000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define RCC_BASE (AHBPERIPH_BASE + 0x3800)
再定义RCC寄存器结构体
typedef struct
{
__IO uint32_t CR;
__IO uint32_t ICSCR;
__IO uint32_t CFGR;
__IO uint32_t CIR;
__IO uint32_t AHBRSTR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__IO uint32_t AHBENR;
__IO uint32_t APB2ENR;
__IO uint32_t APB1ENR;
__IO uint32_t AHBLPENR;
__IO uint32_t APB2LPENR;
__IO uint32_t APB1LPENR;
__IO uint32_t CSR;
} RCC_TypeDef;
#define RCC ((RCC_TypeDef *) RCC_BASE)
此处真的是很精妙,既把RCC定义成了一结构体,也阐明了它引用的地址。直接可以使用
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
{
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE) {
RCC->AHBENR |= RCC_AHBPeriph;
}
else {
RCC->AHBENR &= ~RCC_AHBPeriph;
}
}
函数调用:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
其中:#define RCC_AHBPeriph_GPIOC RCC_AHBENR_GPIOCEN
#DEFINE GPIOCEN (Unit32_t)0x0x00000004
RCC->AHBENR|=RCC_AHBPeriph 等价于 RCC->AHBENR=RCC->AHBENR|0x0x00000004,使得RCC_AHBENR寄存器中GPIOC的使能位置1;
但个人也有疑问:结构体中寄存器变量的位置如何确定?
隔天小哥自己阅读代码结构发现不同外设结构体的设置都是不同的,参照芯片手册后发现一个有趣的现象。
推测结构体内部成员的地址值是向上增长的,相应的寄存器成员变量地址也就确定了。
以下是结构体对照:
typedef struct # typedef struct
{ # {
__IO uint32_t KR; # __IO uint16_t CR1;
__IO uint32_t PR; # uint16_t RESERVED0;
__IO uint32_t RLR; # __IO uint16_t CR2;
__IO uint32_t SR; # uint16_t RESERVED1;
} IWDG_TypeDef; # __IO uint16_t SR;
~~~~~~~~~~~~ # uint16_t RESERVED2;
~~~~~~~~~~~~ # __IO uint16_t DR;
~~~~~~~~~~~~ # uint16_t RESERVED3;
~~~~~~~~~~~~ # __IO uint16_t CRCPR;
~~~~~~~~~~~~ # uint16_t RESERVED4;
~~~~~~~~~~~~ # __IO uint16_t RXCRCR;
~~~~~~~~~~~~ uint16_t RESERVED5;
~~~~~~~~~~~~ __IO uint16_t TXCRCR;
~~~~~~~~~~~~ uint16_t RESERVED6;
~~~~~~~~~~~~ } SPI_TypeDef;
波浪线仅为对齐好看使用
IWDG寄存器占据四字节的定义为 __IO uint32_t 类型
SPI 寄存器占据两字节的定义为 __IO uint16_t 类型,中间空出的则用 uint16_t RESERVED填充,可以证实以上的猜测。
上一篇:STM32通用定时器的几个重要寄存器
下一篇:STM32学习札记--ADC的有关函数个人见解
推荐阅读
史海拾趣
为了加速产品的市场推广和应用,Econais积极寻求与行业内其他优秀企业的合作。XXXX年,Econais与Xively公司达成战略合作,共同为工业、商业和住宅市场提供一站式的物联网解决方案。通过这次合作,Econais的WiSmart Wi-Fi用户能够无缝连接到Xively云,为各种物联网应用提供强有力的支持。
随着技术的不断完善,Fermionics Lasertech Inc公司的产品线逐渐丰富,从单一的激光切割设备扩展到激光打标、焊接、打孔等多个领域。公司开始加大市场推广力度,积极参加国内外各类电子展会,与潜在客户建立联系。同时,公司还注重品牌建设,通过优质的产品和服务赢得了良好的口碑,逐渐在电子行业树立了品牌形象。
随着业务的不断发展和产品的不断升级,ABI Electronics公司的品牌影响力也逐渐提升。其产品在市场上获得了良好的口碑和声誉,成为了电子行业内的知名品牌。同时,ABI还积极参与行业内的交流和合作,为行业的发展做出了积极的贡献,进一步提升了其在行业内的地位和影响力。
这五个故事展示了ABI Electronics公司在电子行业里的发展历程,从电路板测试技术的突破,到集成电路测试技术的创新,再到全球市场布局和合作伙伴关系的建立,以及研发实力的持续增强和品牌影响力的提升,都体现了ABI Electronics公司不断进取、不断创新的精神。
自2000年4月成立以来,Enova Technology Corporation(伊诺瓦科技)就以其卓越的技术创新能力在电子行业中崭露头角。公司总部位于台湾新竹科学工业园区,这里汇聚了众多高科技企业和研发机构,为伊诺瓦科技提供了丰富的技术资源和人才支持。
伊诺瓦科技专注于硬件加解密解决方案的研发与应用,其产品在军事单位、政府机关、财务金融机构等领域得到了广泛应用。其中,公司的X-WallSE产品凭借其独特的携带式电子钥匙(Security Key)技术,实现了硬盘的一对一加密,为用户提供了前所未有的数据安全保护。这一创新技术的推出,不仅提升了公司的市场竞争力,也为整个电子行业树立了新的技术标杆。
随着技术的不断发展,伊诺瓦科技不断推出更加先进的产品和解决方案。例如,公司的SecureNAS系列产品在网络硬盘服务器加解密应用方面提供了全新的解决方案,为用户提供了更加便捷、高效的数据安全保护。这些产品的推出,不仅进一步巩固了公司在电子行业的领先地位,也为公司的未来发展奠定了坚实的基础。
自成立以来,科山芯创始终坚持技术创新。他们投入大量资源用于研发,不断推出新产品。其中,COS8820射频收发芯片、COS6212线驱动器功放芯片等产品,凭借其优异的性能和稳定性,在市场上获得了广泛认可。这些产品的成功,不仅证明了科山芯创的技术实力,也为其在电子行业中树立了良好的口碑。
为了满足全球客户的需求,ELEMENT14致力于构建和优化全球供应链。公司与多家国际知名电子元器件制造商建立了长期稳定的合作关系,确保了货源的稳定性和多样性。同时,ELEMENT14还建立了全球物流体系,实现了快速、准确的物流配送服务。这些措施不仅提升了客户满意度,也增强了公司在全球市场的竞争力。
1. Warning 280:’i’:unreferenced local variable 说明 局部变量 i 在函数中未作任何的存取操作 解决方法 消除函数中 i变量的宣告 2 Warning 206:’Music3’:missing function-prototype 说明 Music3( )函数未作宣告 或未作外部宣告 ...… 查看全部问答∨ |
|
最近调试u-boot 下 lcd显示,由于原配的lcd为320*240的TFT,现在我要改为640*480,修改参数后发现显示是稳定的,但是显示3块错开的相同的内容(分别在屏幕的上中下的位置),不知是什么原因。有人碰到过吗;请问是什么原因呢?… 查看全部问答∨ |
|
1. 实验任务 利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。 麻烦帮忙检查下下面代码有什么问题,实在看不出来错在哪里 程序代码: ORG 0 START: MOV DPTR,#TABLE LOOP: CLR A MOVC A,@A+DPTR ...… 查看全部问答∨ |
按照PB帮助文档作的BLDR,NK.bin也可以通过网络或者在终端运行,PB是5.0的版本. 以下是错误信息: Microsoft Windows CE BIOS Bootloader Version 2.2 (Built Mar 13 2004) WARNING: code=0x7. WARNING: code=0x13. WARNING: code=0x7. WARNING: ...… 查看全部问答∨ |
一、引言 Linux本身为分时操作系统,其系统目标为较好的平均响应时间和较高的吞吐量,而实时系统则主要考虑任务的按时完成、尽量减少进程运行的不可预测性等。但与商业嵌入式操作系统相比Linux遵循GPL,具有源代码开放、定制方便、支持广泛的计算 ...… 查看全部问答∨ |
1/1.I/O, ASDO 在AS 模式下是专用输出脚,在PS 和JTAG 模式下可以当I/O 脚来用。在AS 模式下,这个脚是CII 向串行配置芯片发送控制信号的脚。也是用来从配置芯片中读配置数据的脚。在AS 模式下,ASDO 有一个内部的上拉电阻,一直有效,配置完成后 ...… 查看全部问答∨ |