历史上的今天
今天是: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寄存器来实现
史海拾趣
|
我要做基于SPCE061A凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。… 查看全部问答> |
|
不多的文章,与大家分享下:你有你的开发故事么? 美国德克萨斯州最大的城市达拉斯。在这个有着牧牛和牛仔历史的城市里,一项技术宣告诞生。这项技术在很长时间里“养在深闺人未识”,甚至一度处于行将消亡的境地。然而,凭借一个 ...… 查看全部问答> |
|
新一轮毕业生招聘季节即将到来,今年就业形势依然严峻。用人单位不仅要求大学生学习成绩好、在校表现好,还要求各方面的综合能力强,因此—— 毕业生比拼职业技能 2009年的校园招聘大战已初露端倪,一家知名人才网 ...… 查看全部问答> |
|
我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize &nbs ...… 查看全部问答> |
|
本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...… 查看全部问答> |
|
我用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 ...… 查看全部问答> |




