BE_VOILIER/MyUart.c

61 lines
1.3 KiB
C

#include "stm32f10x.h"
#include "MyGPIO.h"
#include "MyTimer.h"
void My_USART_Config(USART_TypeDef* USARTx, uint32_t baudrate) { //QUE POUR USART1
// Configuration PA9 (Tx) en Alternate Function Push-Pull
GPIO_configure(GPIOA, 9 , 3);
// Configuration PA10 (Rx) en Input Floating
GPIO_configure(GPIOA, 10 , 2);
NVIC_EnableIRQ(USART1_IRQn);
NVIC_SetPriority(USART1_IRQn, 3<<4);
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
// USARTx->CR2 |= USART_CR2_CLKEN;
USARTx->CR1 |= USART_CR1_UE;
USARTx->BRR = baudrate;
USARTx->CR1 |= USART_CR1_TE;
USARTx->CR1 |= USART_CR1_RE;
};
void USART_Send_Char(USART_TypeDef* USARTx, char car) {
while ((USARTx->SR & USART_SR_TXE)==0){
}
USARTx->DR = car;
};
void USART_Send_String(USART_TypeDef *USARTx, char *pString)
{
while (*pString != '\0')
{
USART_Send_Char(USARTx, *pString);
pString++;
}
};
void (*pFnc_Receive) (char);
void USART_IT_Receive_Enable(USART_TypeDef* USARTx) {
USARTx->CR1 |= USART_CR1_RXNEIE;
};
void Init_IT_Receive(void (*Receive_IT_function) (char)){
pFnc_Receive = Receive_IT_function;
};
void USART1_IRQHandler(void){
signed char commande = USART1->DR;
if (pFnc_Receive != 0) {
pFnc_Receive(commande);
}
};