关闭

STM32的库如何实现对同一组IO口的一部分引脚进行读写

1877人阅读 评论(0) 收藏 举报
分类:
规则: 
一、置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; 

高八位同理。 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18886次
    • 积分:328
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条