STM32的库如何实现对同一组IO口的一部分引脚进行读写
2015-09-12 11:31
281 查看
规则:
一、置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;
高八位同理。
相关文章推荐
- Lettcode_235_Lowest Common Ancestor of a Binary Search Tree
- 数据结构实践——链表:多项式求和
- 上传图片 生成指定大小的缩略图
- php广告图片循环播放 幻灯片效果
- c++11——模板的细节改进
- C/C++中extern关键字详解
- MSTP+OSPF+VRRP综合实验指导书
- Spring初识(一)
- codeforces 377B Modulo Sum(数学,dp)
- ios ftp开发中的一个NSString问题
- ASP 生成缩略图
- IE以及其他浏览器主页被劫持到www.2345.com/?kunown的解决办法
- EQueue文件持久化消息关键点设计思路
- jquery ajax提交表单数据的两种方式
- Linux 下启动、关闭tomcat 杀掉进程等命令
- 关于 configure.in 文档中的若干笔记
- NS_ENUM & NS_OPTIONS 枚举
- 求两点间的距离
- CCF 201409-2 画图 题解
- SOAP的简单理解