STM32F0引脚复用功能配置的一些说明
来源: 芯艺工作室
本站广告
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  C720H5上实现MODBUS远程IO
  FM1702读写S50(也叫M1)卡相关资料

STM32F0的一个引脚不仅可用于通用的IO外往往还可以用于多个集成外设的输入输出端口;
所以当用于外设口时除了将引脚设置成外设模式外还要选择哪一个外设
以STM32F030的PB6,PB7引脚为例,当这两个引脚用于UART1的RX,TX时代码如下:

void UartInit(void)
{
  USART_InitTypeDef USART_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
    
  //Enable USART1 clock
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );  

  //USART1 Pins configuration
  
  //引脚连接到外设0
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0); 
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0);    
  
  //引脚配置为外设模式
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
  
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init( USART1, &USART_InitStructure );
  
  USART_Cmd( USART1, ENABLE );
}


选择外设的代码是:

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_0); 
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_0);  

那么为什么是GPIO_AF_0呢?而不是AF1,AF2...,其实在数据手册上专门有一个表格说明一个引脚对应
的外设的顺序;
打开STM32F030的数据手册,在“4 Pinouts and pin descriptions”中找到表“Table 13. Alternate functions selected through GPIOB_AFR registers for port B”,这里说明了PB6,PB7引脚对应的外设顺序;要注意的是这个引脚顺序与表“Pin definitions”表格上的外设顺序可能不一样哦!







声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved