X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Flib%2Fstm32f407.c;h=577fec0e08f2a0d85c8eaab57c30db54feeb5947;hp=b781e49993d28eb797bf1e7682cc9dae65c1e78d;hb=2227450d163d64269a63b267b6f3434833f9a86e;hpb=adc84c6eb5761e45f6323b2c4440acb30b0a490b diff --git a/firmware/lib/stm32f407.c b/firmware/lib/stm32f407.c index b781e49..577fec0 100644 --- a/firmware/lib/stm32f407.c +++ b/firmware/lib/stm32f407.c @@ -22,8 +22,8 @@ void ioinit(){ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD, &GPIO_InitStructure); } @@ -33,6 +33,9 @@ void stmdelay(){ //__IO uint32_t count= 0x100000; // 5 bits per second, for testing while(count--); } + +/* Used for debugging only. + void ledon(){ GPIO_SetBits(GPIOD, GPIO_Pin_14); } @@ -46,6 +49,8 @@ void clkoff(){ GPIO_ResetBits(GPIOD, GPIO_Pin_12); } + + void spibit(int one){ if(one) ledon(); else ledoff(); @@ -74,7 +79,7 @@ void spibyte(uint8_t word){ } } - +*/ //! Count the length of a string. uint32_t strlen(const char *s){ @@ -84,20 +89,24 @@ uint32_t strlen(const char *s){ } -//! Initialize the USART -void usartinit(){ - GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - +/**************************************************************************************/ +void Repair_Data(); +void RCC_Configuration(void) +{ /* --------------------------- System Clocks Configuration -----------------*/ /* USART1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* GPIOB clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); - - - +} + +/**************************************************************************************/ + +void GPIO_Configuration(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + /*-------------------------- GPIO Configuration ----------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; @@ -109,29 +118,53 @@ void usartinit(){ /* Connect USART pins to AF */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); // USART1_TX GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); // USART1_RX - +} + +/**************************************************************************************/ + +void USART1_Configuration(void) +{ + USART_InitTypeDef USART_InitStructure; + /* USARTx configuration ------------------------------------------------------*/ /* USARTx configured as follow: - - BaudRate = 9600 baud + - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ - USART_InitStructure.USART_BaudRate = 9600; + //USART_InitStructure.USART_BaudRate = 9600; + //USART_InitStructure.USART_BaudRate = 10000; //Close enough to 9600 + //USART_InitStructure.USART_BaudRate = 115200; + //USART_InitStructure.USART_BaudRate = 125200; //Close enough to 115200 + + //135000 is too high + //115200 is too low + USART_InitStructure.USART_BaudRate = 125000; //Close enough to 115200 + 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_InitStructure.USART_Mode = USART_Mode_Tx; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } + + +//! Initialize the USART +void usartinit(){ + RCC_Configuration(); + + GPIO_Configuration(); + + USART1_Configuration(); +} //! Initialize the STM32F4xx ports and USB. @@ -142,6 +175,7 @@ void stm32f4xx_init(){ ioinit(); usartinit(); + while(i--) stmdelay(); return; } @@ -159,12 +193,12 @@ unsigned char serial1_rx(){ //! Transmit a byte. void serial0_tx(unsigned char x){ - spiword(0xdead); - - while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); + //Send through USART1 on PB6 + while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //original USART_SendData(USART1, (uint16_t) x); - spiword(0xbeef); + //Spare goes to SPI. + //spibyte(x); } //! Transmit a byte on the second UART.