Driver_USART.c
#include "Driver_USART.h"
void Driver_USART1_Init(void)
{RCC->APB2ENR |= RCC_APB2ENR_USART1EN;RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;GPIOA->CRH |= GPIO_CRH_CNF9_1;GPIOA->CRH &= ~GPIO_CRH_CNF9_0;GPIOA->CRH |= GPIO_CRH_MODE9;GPIOA->CRH &= ~GPIO_CRH_CNF10_1;GPIOA->CRH |= GPIO_CRH_CNF10_0;GPIOA->CRH &= ~GPIO_CRH_MODE10;USART1->BRR = 0x271;USART1->CR1 &= ~USART_CR1_M;USART1->CR1 &= ~USART_CR1_PCE;USART1->CR2 &= ~USART_CR2_STOP;USART1->CR1 |= USART_CR1_TE;USART1->CR1 |= USART_CR1_RE;USART1->CR1 |= USART_CR1_RXNEIE; USART1->CR1 |= USART_CR1_IDLEIE; NVIC_SetPriorityGrouping(3);NVIC_SetPriority(USART1_IRQn, 2);NVIC_EnableIRQ(USART1_IRQn);USART1->CR1 |= USART_CR1_UE;
}
void Driver_USART1_SendChar(uint8_t byte)
{while ((USART1->SR & USART_SR_TXE) == 0);USART1->DR = byte;
}
void Driver_USART1_SendString(uint8_t *str, uint16_t len)
{for (uint16_t i = 0; i < len; i++){Driver_USART1_SendChar(str[i]);}
}
uint8_t Driver_USART1_ReceiveChar(void)
{while ((USART1->SR & USART_SR_RXNE) == 0);return USART1->DR;
}
void Driver_USART1_ReceiveString(uint8_t buff[], uint8_t *len)
{uint8_t i = 0;while (1){while ((USART1->SR & USART_SR_RXNE) == 0){if (USART1->SR & USART_SR_IDLE){*len = i;return;}}buff[i] = USART1->DR;i++;}
}
uint8_t buff[100] = {0};
uint8_t len = 0;
uint8_t isToSend = 0;
void USART1_IRQHandler(void)
{if (USART1->SR & USART_SR_RXNE){buff[len] = USART1->DR;len++;}else if (USART1->SR & USART_SR_IDLE){USART1->SR;USART1->DR;isToSend = 1;}
}
int fputc(int c, FILE *file)
{Driver_USART1_SendChar(c);return c;
}
Driver_USART.h
#ifndef __DRVIER_USART_H
#define __DRVIER_USART_H#include "stm32f10x.h"
#include "stdio.h"void Driver_USART1_Init(void);void Driver_USART1_SendChar(uint8_t byte);void Driver_USART1_SendString(uint8_t *str, uint16_t len);uint8_t Driver_USART1_ReceiveChar(void);void Driver_USART1_ReceiveString(uint8_t buff[], uint8_t *len);#endif
main.h
extern uint8_t buff[100] = {0};
extern uint8_t len = 0;
extern uint8_t isToSend = 0;void main(){
while(1){if(isToSend){Driver_USART1_SendString(buff, len);isToSend = 0;len = 0;}}
}