/** ****************************************************************************** * @file : main.c * @brief : Programme de DEMO sur la carte KItSTM32L476 IUT1 ****************************************************************************** * @author : Manuel Alejandro Baez Ponce ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stdio.h" //pour sprintf ? #include "string.h" //pour strlen #include "stm32l4xx.h" //qui inclus stm32l476xx.h avec les defs de registres /*Prototypes fonctions de system_stm32l4xx.c*/ extern void SystemCoreClockUpdate(void); /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); void init_GPIO(void); void init_USART2(void); void init_ADC1(void); char read_USART2(void); void write_USART2(char dato); char read_ADC1(void); int main(void) { SystemClock_Config(); init_GPIO(); // init_TIM(); init_USART2(); char saludo[] = "0123456789"; char dato = 0; for (int i=0; saludo[i]!='\0'; i++){ write_USART2(saludo[i]); } while (1) { dato = read_USART2(); write_USART2(dato); } } /***************************************************/ /********FONCTIONS D'INIT**********/ void SystemClock_Config(void){ RCC->CR &= 0x000000F1; while((RCC->CR & RCC_CR_MSIRDY) == 0); RCC->CR |= RCC_CR_MSIRGSEL; RCC->CR &= 0xFFFFFF7F; RCC->CR |= 0x70; RCC->CR &= ~RCC_CR_PLLON; while((RCC->CR & RCC_CR_PLLRDY) !=0 ); RCC->PLLCFGR = (10<<8) | RCC_PLLCFGR_PLLSRC_MSI; RCC->CR |= RCC_CR_PLLON; RCC->PLLCFGR |= RCC_PLLCFGR_PLLREN; RCC->CFGR = RCC_CFGR_SW_PLL; SystemCoreClockUpdate(); } void init_GPIO(void){ RCC->AHB2ENR |= 0x00002001; RCC->APB1ENR1 |= RCC_APB1ENR1_USART2EN; RCC->CCIPR &= ~RCC_CCIPR_USART2SEL; GPIOA->MODER &= 0xFFFFFF0C; GPIOA->MODER |= 0x000000A3; GPIOA->AFR[0] &= 0xFFFF00FF; GPIOA->AFR[0] |= 0x00007700; } void init_USART2(void){ // ConfiguraciĆ³n del modulo UART2 //USART1_IRQn USART2->CR1 &= ~USART_CR1_UE; USART2->CR1 &= 0xE3FF0A0C; USART2->CR1 |= 0x0000000C; USART2->CR2 &= 0xFF60008F; USART2->CR2 |= 0x00000000; USART2->CR3 &= 0xFE0F0800; USART2->CR3 |= 0x00000000; USART2->BRR &= 0x00000000; USART2->BRR |= 0x0000208D; USART2->CR1 |= USART_CR1_UE; } void init_ADC1(void){ ADC1->CR &= ~ADC_CR_ADEN; ADC1->CR &= 0x9FFFFFC0; ADC1->CR |= 0x10000000; ADC1->CFGR &= 0xFC40A3CF; ADC1->CFGR |= 0x80002000; ADC1->CFGR2 &= 0xFFFFFFFF; ADC1->CFGR2 |= 0x00000000; } char read_USART2(void){ while (!(USART2->ISR & USART_ISR_RXNE)); char dato = (char)(USART2->RDR & 0x000000FF); return dato; } void write_USART2(char dato){ while (!(USART2->ISR & USART_ISR_TXE)); USART2->TDR = (int) dato; } char read_ADC1(void){ }