嵌入式C語言寄存器操作
一、常用寄存器操作
/* 設(shè)置位 (置1) */
*pReg |= (1 << bit_position);
/* 清除位 (置0) */
*pReg &= ~(1 << bit_position);
/* 取反 */
*pReg ^= (1 << bit_position);
二、寄存器寫操作
如下所示為配置Pc13引腳為輸出模式的錯誤示例:
/* 配置為通用輸出
* 00:Input mode
* 01:General purpose output mode
* 10:Alternate function mode
* 11:Analog mode(reset state)
*/
pReg = (uint32_t *)(0x48000800 + 0x00);
*pReg |= 0x01 << 26;
默認(rèn)配置為為11,上述操作只修改了第二位,第一位未修改,導(dǎo)致配置錯誤,正確配置如下:
/* 配置為通用輸出 */
pReg = (uint32_t *)(0x48000800 + 0x00);
*pReg &= ~(0x03 << 26);
*pReg |= 0x01 << 26;
上述配置仍存在一定的安全問題,在對寄存器進(jìn)行操作時,我們一定要遵守:讀->改->寫的步驟:
/ 單次讀-修改-寫保證原子性
uint32_t temp = *pReg;
temp &= ~(0x03 << 26); // 清除MODER13區(qū)域
temp |= 0x01 << 26; // 設(shè)為輸出模式
*pReg = temp;

浙公網(wǎng)安備 33010602011771號