Robot_Bluetooth/App/usart/usart.c

117 lines
2.7 KiB
C

#include "usart.h"
unsigned char Serial_RxData;
unsigned char Serial_RxFlag;
void Usart_Init(unsigned int BaudRate)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate=BaudRate;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用流控
USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//发送接收模式
USART_InitStruct.USART_Parity=USART_Parity_No;//无校验
USART_InitStruct.USART_StopBits=USART_StopBits_1;//一位停止位
USART_InitStruct.USART_WordLength=USART_WordLength_8b;//八位字长
USART_Init(USART1,&USART_InitStruct);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
USART_Cmd(USART1,ENABLE);
}
void Serial_SendByte(unsigned char Byte)
{
USART_SendData(USART1,Byte);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==0);
}
void Serial_SendArray(unsigned char *Array,unsigned short Length)
{
unsigned short i;
for(i=0;i<Length;i++)
{
Serial_SendByte(Array[i]);
}
}
void Serial_SendString(char *string)
{
unsigned char i;
for(i=0;string[i]!='\0';i++)
{
Serial_SendByte(string[i]);
}
}
unsigned int Serial_Pow(unsigned int x,unsigned int y)
{
unsigned int Result =1;
while(y--)
{
Result *=x;
}
return Result;
}
void Serial_SendNumber(unsigned int Number,unsigned char Length)
{
unsigned char i;
for(i=0;i<Length;i++)
{
Serial_SendByte(Number/Serial_Pow(10,Length-i-1)%10+'0');
}
}
int fputc(int ch,FILE *f)
{
Serial_SendByte(ch);
return ch;
}
unsigned char Serial_GetRxFlag(void)
{
if(Serial_RxFlag==1)
{
Serial_RxFlag=0;
return 1;
}
return 0;
}
unsigned char Serial_GetRxData(void)
{
return Serial_RxData;
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
{
Serial_RxData=USART_ReceiveData(USART1);
Serial_RxFlag=1;
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}