历史上的今天
返回首页

历史上的今天

今天是:2025年03月06日(星期四)

正在发生

2020年03月06日 | ST官方库函数之GPIO口读写函数

2020-03-06 来源:eefocus

GPIO口读写函数有如下8个;


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);


这几个函数结构比较简单,一个个来看


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  uint8_t bitstatus = 0x00;

 

  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)

  {

    bitstatus = (uint8_t)Bit_SET;

  }

  else

  {

    bitstatus = (uint8_t)Bit_RESET;

  }

  return bitstatus;

}


此函数为读取GPIO端口输入寄存器IDR某一位的状态,返回一个8位的值;


uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

{

  

  return ((uint16_t)GPIOx->IDR);

}


此函数为读取一组GPIO端口输入寄存器IDR的值,返回一个16位的值;


uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  uint8_t bitstatus = 0x00;

  

  if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)

  {

    bitstatus = (uint8_t)Bit_SET;

  }

  else

  {

    bitstatus = (uint8_t)Bit_RESET;

  }

  return bitstatus;

}


此函数为读取GPIO端口输出寄存器ODR某一位的状态,返回一个8位的值;


uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

{

  return ((uint16_t)GPIOx->ODR);

}


此函数为读取一组GPIO端口输出寄存器ODR的值,返回一个16位的值;


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  

  GPIOx->BSRR = GPIO_Pin;

}


此函数为对GPIO端口某一位进行置位操作,通过BSRR寄存器实现;


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

   GPIOx->BRR = GPIO_Pin;

}


此函数为对GPIO端口某一位进行复位操作,通过BRR寄存器实现;




void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

{

    

  if (BitVal != Bit_RESET)

  {

    GPIOx->BSRR = GPIO_Pin;

  }

  else

  {

    GPIOx->BRR = GPIO_Pin;

  }

}


此函数为对GPIO端口某一位进行写操作,输入参数有3个值,其中参数BitVal可为整型值0或者1,


其中关于BitAction,见如下定义typedef enum

{ Bit_RESET = 0,

  Bit_SET

}BitAction;


void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

{

    GPIOx->ODR = PortVal;

}


此函数为对某一组GPIO口进行写操作,输入参数PortVal为一个16位的值,同过直接操作ODR寄存器来实现

推荐阅读

史海拾趣

Digital公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Celduc Relais公司的发展小趣事

Celduc Relais公司自创立之初,便以技术创新为核心驱动力。在公司的早期发展阶段,研发团队成功开发了一款具有颠覆性的继电器产品,该产品在性能、稳定性和寿命等方面均达到了行业领先水平。这一突破性的技术创新不仅为公司赢得了市场的广泛认可,也为后续的产品线扩展和技术升级奠定了坚实基础。

Dongguan City Niuhang Electronics Co.LTD公司的发展小趣事

Dongguan City Niuhang Electronics Co.LTD成立于2012年,当时的中国电子行业正处于快速发展期。创始人李小芹凭借对半导体技术的深刻理解和市场需求的敏锐洞察,决定专注于二极管、桥式整流器等产品的研发与封装。公司成立初期,面临着资金短缺、技术储备不足等挑战,但李小芹凭借坚定的信念和不懈的努力,带领团队攻克了一个又一个技术难关,逐步在市场上树立了良好的口碑。

广东奥科公司的发展小趣事

随着企业规模的扩大和影响力的提升,广东奥科公司开始积极承担社会责任,推动可持续发展。公司注重环保和节能技术的应用,致力于生产环保型电子产品,减少生产过程中的能源消耗和环境污染。同时,广东奥科公司还积极参与社会公益事业,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

这些故事展示了广东奥科公司在电子行业中的发展历程和取得的成就,也体现了公司不断创新、追求卓越的精神。未来,广东奥科公司将继续秉持这一精神,为电子行业的发展贡献更多的力量。

富捷(FOJAN)公司的发展小趣事

富捷电子的发展离不开政府的大力支持和帮助。近年来,公司多次获得地方政府颁发的荣誉和奖励,如“制造业三年倍增先进集体”等。这些荣誉不仅是对公司过去成绩的肯定,更是对未来发展的期许和激励。在政府的政策扶持下,富捷电子将继续加大研发投入、优化产品结构、提升市场竞争力,为电子元器件行业的国产化替代和高质量发展作出更大贡献。

APEM公司的发展小趣事

随着公司规模的扩大,APEM开始实施国际化发展战略。1975年,APEM在欧洲创建了首家附属公司,随后又在英国、突尼斯、比利时、荷兰和卢森堡等地成立分公司。这些举措不仅扩大了APEM的市场份额,也提升了其在国际市场的知名度。

问答坊 | AI 解惑

ccd资料包

飞思卡尔智能车上用的ccd摄像头…

查看全部问答>

SPCE061A凌阳单片机编程红外遥控

我要做基于SPCE061A凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。…

查看全部问答>

【开发故事】DLP投影仪:坚持20年不放弃的男人

  不多的文章,与大家分享下:你有你的开发故事么?   美国德克萨斯州最大的城市达拉斯。在这个有着牧牛和牛仔历史的城市里,一项技术宣告诞生。这项技术在很长时间里“养在深闺人未识”,甚至一度处于行将消亡的境地。然而,凭借一个 ...…

查看全部问答>

哪类应届毕业生最受欢迎? 毕业生比拼职业技能

新一轮毕业生招聘季节即将到来,今年就业形势依然严峻。用人单位不仅要求大学生学习成绩好、在校表现好,还要求各方面的综合能力强,因此——     毕业生比拼职业技能     2009年的校园招聘大战已初露端倪,一家知名人才网 ...…

查看全部问答>

那位朋友知道那里能搞到RIL.lib的源代码?

我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize               &nbs ...…

查看全部问答>

发个最新构思和大家讨论讨论

本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...…

查看全部问答>

AT+CMGS很慢,为什么?

我用MC39i发送PDU短信,在AT+CMGS这一步的时候很慢,要3、4秒才能出现\">\",为什么呢?有什么方法加快速度吗? 我看过别人也是用MC39i,但是一般1秒之内就可以发送出去了,怎么会差这么远呢?…

查看全部问答>

100分相送,如何在dopod818 PPC上注册蓝牙串口通讯???

如题:如何在dopod818 PPC上注册蓝牙串口通讯??? 主要的目的是想让GPS通过蓝牙控制dopod818手机发送/读取短信,和读取电话本信息,现在有的手机像dopod818没有蓝牙串口服务,要自己实现注册串口服务,然后通过打开串口进行通讯和发送AT命令来实 ...…

查看全部问答>

STR912怎么清串口中断标志?keiluv3和uv4居然不一样?

UART_ClearITPendingBit函数 uv3中是 void UART_ClearITPendingBit(UART_TypeDef* UARTx, u16 UART_IT) {   /* Clear the specified interrupt */   UARTx->ICR &= UART_IT; } uv4中是 void UART_ClearI ...…

查看全部问答>