temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
此帖出自
小平头技术问答
temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ; 读取AF寄存器值
GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;清除部分位
temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;后2个是给AFR寄存器赋值
很简单的,你是初学者?
寄存器
寄存器我也有问题,
#define DS18B20_IO_IN1() {GPIOA->MODER&= 0<<30;GPIOA->MODER&= 0<<31;GPIOA->MODER|=0<<15*2;}
#define DS18B20_IO_OUT1() {GPIOA->MODER&= 0<<30;GPIOA->MODER&= 0<<31;GPIOA>MODER|=1<<15*2;}
这个是stm32F405的操作,我想对PA15先清零然后再赋值,(不巧PA15旁边的PA14、PA13是我的下载引脚)大神看看这两句话那个地方不对,我一下这段程序板子就烧不进去程序,而且下完这个程序以后板子就再也烧不进去程序了
那为什么要0x07*4?
一周热门 更多>