STM32的库如何实现对同一组IO口的一部分引脚进行读写
2016-06-01 09:57
302 查看
规则:
一、置GPIOD->BSRR低16位的某位为'1',则对应的I/O端口置'1';而置GPIOD->BSRR低16位的某位为'0',则对应的I/O端口不变。
二、置GPIOD->BSRR高16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BSRR高16位的某位为'0',则对应的I/O端口不变。
三、置GPIOD->BRR低16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BRR低16位的某位为'0',则对应的I/O端口不变。
例如:
1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句:
GPIOD->BSRR = 0x0C21;// 使用规则一
2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句:
GPIOD->BRR = 0xC00A;// 使用规则三
3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句:
GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二
所以,如果想改变一组引脚的低八位的值,可以这样实现:
#define DATAOUT(data) do{ \
GPIO_SetBits(GPIOE, data&0x00ff); \
GPIO_ResetBits(GPIOE,(~data & 0x00ff)); \
}while(0)
也可以直接操作这两个寄存器:
GPIOD->BSRR = data & 0x00ff;
GPIOD->BRR = ~data & 0x00ff;
高八位同理。
一、置GPIOD->BSRR低16位的某位为'1',则对应的I/O端口置'1';而置GPIOD->BSRR低16位的某位为'0',则对应的I/O端口不变。
二、置GPIOD->BSRR高16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BSRR高16位的某位为'0',则对应的I/O端口不变。
三、置GPIOD->BRR低16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BRR低16位的某位为'0',则对应的I/O端口不变。
例如:
1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句:
GPIOD->BSRR = 0x0C21;// 使用规则一
2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句:
GPIOD->BRR = 0xC00A;// 使用规则三
3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句:
GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二
所以,如果想改变一组引脚的低八位的值,可以这样实现:
#define DATAOUT(data) do{ \
GPIO_SetBits(GPIOE, data&0x00ff); \
GPIO_ResetBits(GPIOE,(~data & 0x00ff)); \
}while(0)
也可以直接操作这两个寄存器:
GPIOD->BSRR = data & 0x00ff;
GPIOD->BRR = ~data & 0x00ff;
高八位同理。
相关文章推荐
- docker-compose 所带来的方便
- .NET Core 单元测试 MSTest
- eclipse 卡
- JS弹出新闻类窗口
- java实现的md5加密
- HTML参考
- 内核和用户空间的消息传递-事件通知 (2)
- SQL查询执行计划优化
- Android性能优化
- 关于楼层导航
- 可能是多线程的吧,没尝试这个类怎么样,有时间时候看看
- 笔记一:关于在Windows环境下使用cmd向mysql数据库中导入.sql数据表文件
- NaCl学习笔记: 环境搭建
- c# get post 的方法
- grep命令详解
- SIFT特征提取分析
- absent line number information
- 深入理解PHP之源码目录结构与功能说明
- windows tomcat项目更新及数据库备份脚本
- 我在Android开发中遇到的一些问题