永发信息网

关于 STM32 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 的库函数看不太懂,希望大侠能每一句都注释…

答案:1  悬赏:80  手机版
解决时间 2021-03-29 16:38
  • 提问者网友:山高云阔
  • 2021-03-28 19:21
关于 STM32 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 的库函数看不太懂,希望大侠能每一句都注释…
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-03-28 20:47
这函数实际是完成AFIO->MAPR寄存器的配置,我就是嫌这代码写的太烦了,所以直接对寄存器进行操作。比如将串口2重映射时,就是:
AFIO->MAPR|=GPIO_Remap_USART2;
要取消重映射,就是:
AFIO->MAPR&=~GPIO_Remap_USART2;
GPIO_Remap_USART2在stm32f10x_GPIO.h中是有定义的,AFIO->MAPR寄存器各个位的定义在参考手册中有详细描述。追问我不知道可以和你一样写的很简单,可为什么库函数偏要这样写??也没看太清楚…………追答固件库的操作,一般就是读-修改-写。
比如这里: tmpreg = AFIO->MAPR;是将MAPR寄存器中的内容读取出来。
之后的代码就根据函数的形参传递的数据进行修改。
AFIO->MAPR = tmpreg时将修改后的结果写回MAPR,就见到效果了。
固件库这么干是为了严谨无误,我用的方式要求自己有清晰的判断,不然很容易出错。追问#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010)
就说这个宏定义吧,我不太懂,
01: 部分映像(TX/PC10,RX/PC11,CK/PC12,CTS/PB13,RTS/PB14);
怎么不是定义成 0x10; 而是0x00140010;我不懂前面还有14了??追答这的确是一个问题,因为PC11引脚还可以作为ADC的外部触发信号输入,所以固件库这么定义是为了将ADC的触发信号转移到TIM8上,不然在串行通信时PC11上的电平电话会引起错误的ADC工作。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯