GPIO Output 有兩種方式:
1. GPIO bit set/reset register (GPIOx_BSRR)
GPIOx_BSRR可以直接(不需要先讀出目前的值)對單獨1個bit做修改,不會影響到其他bit.
若要設定GPIOx的pin 0時,直接在BS0或BR0填入1.
ex.
以STM32F427為例,控制GPIOD的pin腳PD2.
/*Low, set 0*/
*((uint32_t*)0x40020C1A) = ((uint16_t)0x0004);
/*High,set 1*/
*((uint32_t*)0x40020C18) = ((uint16_t)0x0004);
0x40020C1A的來源:從BS(0x40020C18) + offset 2byte = BR(0x40020C1A)
----------------------------------------------------------------------------------
2. GPIO output data register (GPIOx_ODR)
用GPIOx_ODR改1 bit就要一次改2 bytes.
若要設定GPIOx的pin 0時,必須先讀出目前的值,再做'OR'或'AND'運算.
/*Set 1*/
GPIOx->ODR = GPIOx->ODR | 0x01;
/*Set 0*/
GPIOx->ODR = GPIOx->ODR & 0xFFFE;
沒有留言:
張貼留言