帮忙解释下这段程序

2019-03-23 15:43发布

  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;
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
star_66666
1楼-- · 2019-03-23 20:22
/
  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寄存器赋值
很简单的,你是初学者?
star_66666
2楼-- · 2019-03-23 20:51
 精彩回答 2  元偷偷看……
shijizai
3楼-- · 2019-03-24 00:52
本帖最后由 shijizai 于 2018-7-20 10:25 编辑

还是使用寄存器配置比较舒服,看着这些官方提供的就头晕脑胀的,不喜欢,

寄存器

寄存器我也有问题,


#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是我的下载引脚)大神看看这两句话那个地方不对,我一下这段程序板子就烧不进去程序,而且下完这个程序以后板子就再也烧不进去程序了


shijizai
4楼-- · 2019-03-24 05:19
star_66666 发表于 2018-7-20 10:10
temp = ((uint32_t)(GPIO_AF) AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF AFR[GPIO_PinSource >> ...

那为什么要0x07*4?
star_66666
5楼-- · 2019-03-24 07:44
 精彩回答 2  元偷偷看……
shijizai
6楼-- · 2019-03-24 11:45
有没有路过的,拉小白一把呀~

一周热门 更多>