i nekoliko dana zezanja s discovery-em
Ok posto sam pogresno pretpostavio (Bogdan me je ispravio) da STM32 radi na 5v (a radi na 3), ovo sve nije potrebno raditi!!! Neka ovo bude uputstvo kako vezati mcu koji radi na 5v sa periferijom predvidjenom za 3.3v
Postoje dva moguca resenja:
naponski razdelnik i
open drain + pull up otpornik.
Ova dva nacina vezivanja se razlikuju kako po shemi, tako i po kodu, ispod cu dati primere kako sam ja podesio za USART BLUETOOTH modul.
Naponski razdelnik, shema i deo koda za inicijalizaciju pinova:
[att_img2]
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//configure clock for USART
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
//configure clock for GPIO
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//configure AF
GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_USART3);
//configure ports, &GPIO_InitStructure);
/************************************************/
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/************************************************/
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
/* setovanje USART_InitStructure .... */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStructure);
/* Enable USART */
USART_Cmd(USART3, ENABLE);
*** napomena kod naponskog razdelnika treba paziti na otpornosti portova na koje se vezujete
Open drain, shema i deo koda za inicijalizaciju pinova:
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//configure clock for USART
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
//configure clock for GPIO
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//configure AF
GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_USART3);
//configure ports, &GPIO_InitStructure);
/************************************************/
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
/************************************************/
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
/* setovanje USART_InitStructure .... */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStructure);
/* Enable USART */
USART_Cmd(USART3, ENABLE);
*** napomena kod open drain-a treba paziti da otpornik kojim smo pull-up-ovali izlaz ne bude previse niske otpornosti, da velika struja ne bi spalila izlaz.
[Ovu poruku je menjao the_tosic dana 23.02.2012. u 23:15 GMT+1]
[Ovu poruku je menjao the_tosic dana 23.02.2012. u 23:17 GMT+1]