czwartek, 19 listopada 2015

[1a] STM32 M3 - Nucleo - F103RB - Przemapowanie pinów

Tym razem dosyć krótki wpis w którym chciałbym zaprezentować w jaki sposób dokonać przemapowania pinów oraz dla jakich układów istnieje możliwość wykonania takiej zmiany.

Przeniesienie funkcji polega na zmianie wyprowadzeń danej funkcji na inne piny mikrokontrolera. Może to zostać dokonane tylko dla określonych wyprowadzeń dla danej funkcji. Możliwe jest przeniesienie takich elementów jak: 
  • osclator zewnętrzny;
  • timer 1, 2, 3, 4;
  • USART 1, 2, 3;
  • CAN;
  • I2C;
  • SPI 1;
Wszystkie dokładne informacje tzn. jaka funkcja może zostać przeniesiona na jakie piny jest zdefiniowany w dokumentacji dla mikrokontrolera. Dla F103RB są to strony od 28 do 33.

Poniżej przedstawiam krótką część programu składającego się z przykładowej deklaracji przemapowania TIM1. Poszczególne kanały mogą zostać przeniesiona w następujący sposób:
  • PE9 - kanał 1
  • PE11 - kanał 2
  • PE13 - kanał 3
  • PE14 - kanał 4
void GPIOInit(void)
{
  GPIO_InitTypeDef GPIOInit;
 
  GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
 
  GPIOInit.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
  GPIOInit.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
 
  GPIO_Init(GPIOE, &GPIOInit);     
}

W tym przypadku wykorzystałem deklarację FullRemap, oznacza ona pełne przeniesienie timera 1 na inne piny. Możliwe jest także wykorzystanie deklaracji PartialRemap.

Wszystkie możliwe deklaracje zostały zdefiniowane w bibliotece stm32f10x_gpio.h. Wyglądają one następująco:

#define GPIO_Remap_SPI1             ((uint32_t)0x00000001)
#define GPIO_Remap_I2C1             ((uint32_t)0x00000002)
#define GPIO_Remap_USART1           ((uint32_t)0x00000004)
#define GPIO_Remap_USART2           ((uint32_t)0x00000008)
#define GPIO_PartialRemap_USART3    ((uint32_t)0x00140010)
#define GPIO_FullRemap_USART3       ((uint32_t)0x00140030)
#define GPIO_PartialRemap_TIM1      ((uint32_t)0x00160040)
#define GPIO_FullRemap_TIM1         ((uint32_t)0x001600C0)
#define GPIO_PartialRemap1_TIM2     ((uint32_t)0x00180100)
#define GPIO_PartialRemap2_TIM2     ((uint32_t)0x00180200)
#define GPIO_FullRemap_TIM2         ((uint32_t)0x00180300)
#define GPIO_PartialRemap_TIM3      ((uint32_t)0x001A0800)
#define GPIO_FullRemap_TIM3         ((uint32_t)0x001A0C00)
#define GPIO_Remap_TIM4             ((uint32_t)0x00001000)
#define GPIO_Remap1_CAN1            ((uint32_t)0x001D4000)
#define GPIO_Remap2_CAN1            ((uint32_t)0x001D6000)
#define GPIO_Remap_PD01             ((uint32_t)0x00008000)
#define GPIO_Remap_TIM5CH4_LSI      ((uint32_t)0x00200001)
#define GPIO_Remap_ADC1_ETRGINJ     ((uint32_t)0x00200002)
#define GPIO_Remap_ADC1_ETRGREG     ((uint32_t)0x00200004)
#define GPIO_Remap_ADC2_ETRGINJ     ((uint32_t)0x00200008)
#define GPIO_Remap_ADC2_ETRGREG     ((uint32_t)0x00200010)
#define GPIO_Remap_ETH              ((uint32_t)0x00200020)
#define GPIO_Remap_CAN2             ((uint32_t)0x00200040)
#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)
#define GPIO_Remap_SPI3             ((uint32_t)0x00201100)
#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000)