共七种寄存器用于控制GPIO
GPIOx_CRL(常用)
GPIOx_CRH(常用)
GPIOx_IDR(常用)
GPIOx_ODR(常用)
GPIOx_BSRR(常用)
GPIOx_BRR(不常用)
GPIOx_LCKR (不常用)
作用:
GPIOx_CRL寄存器(GPIO控制寄存器低位)
GPIOx_CRH寄存器(GPIO控制寄存器高位)
平均每组IO口有4个位控制
可以看到上下拉只用了一个表示
那么其实是通过配置ODR寄存器来调
因为调为输入模式后ODR寄存器空下来可以作为上下拉输入的控制寄存器
GPIOx_ODR寄存器(GPIO输出数据寄存器)(当为输入模式时16个位对用16个GPIO口)
GPIOx_IDR寄存器(GPIO输入数据寄存器)
GPIOx_BSRR(GPIO端口位设置/清除寄存器或GPIO置0置1寄存器)(用于间接控制GPIOx_ODR寄存器)
用ODR和BSRR寄存器有什么区别?
(此图中“读的数据可能会丢失”不对,应该是在读完后进中断在中断中又操作了寄存器,那么回去写的时候会把在中断里写寄存器的值覆盖)
(本质原因是读->改->写不是一个原子操作,但是单一个写是原子操作)