#include "usart.h"
void USART1_Config(void)
{
USART_InitTypeDef USART_InitStructure;
USART1_GPIO_Config();
//开启USART1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
USART_InitStructure.USART_BaudRate=9600;
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_Tx|USART_Mode_Rx;
//
USART_Init(USART1,&USART_InitStructure);////鏃犵‖浠舵帶鍒舵祦
USART1_NVIC_Config();//中断设置
//使能USART1接收中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//使能USART1
USART_Cmd(USART1,ENABLE);
}
void USART1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//开启GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推完输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入模式
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void USART1_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
//中断优先级组设置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_SendByte(uint8_t byte)
{
USART_SendData(USART1,byte);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//等待发送完成
}
//发送数据串
void USART1_SendData(uint8_t * pdata,uint16_t length)
{
uint16_t i=0;
for(i=0;i<length;i++)
{
USART1_SendByte(*(pdata+i));
}
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//
}
//发送字符串 ,‘\0'结尾
void USART1_SendStr(char * str)
{
uint16_t i=0;
while(*(str+i)!='\0')
{
USART1_SendByte(*(str+i));
i++;
}
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
/*
//接收数据串
void USART1_ReceiveData(uint16_t * pdata)
{
uint16_t i=0;
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
{
pdata[i]=USART_ReceiveData(USART1);
i++;
}
}
*/
void USART1_IRQHandler(void)
{
//uint16_t i=0;
//USART1_SendStr("Receive Cmd:");
while(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_SendData(USART1,USART_ReceiveData(USART1));
}
//while(USART_GetITStatus(USART1,USART_IT_RXEN)!=RESET);
}
int fputc(int ch, FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //淇敼姝ゅ鐨剋hile寰幆鏉′欢
USART_SendData(USART1, (uint8_t) ch); //涓庡瘎瀛樺櫒锛屼互淇敼杈撳嚭绔彛
return ch;
}
评论0