USART串口通信—串口通信–串口通信是什么,串口通信好难啊,呜呜呜
void Uart_Init(void)
{
USART_InitTypeDef Uart_Initsturte; //定义UART结构体
GPIO_InitTypeDef GPIO_Initsture; // 定义传输的引脚
NVIC_InitTypeDef NVIC_INitstrute; //串口使用中断
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启UART3 PB的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //开始UART时钟
Uart_Initsturte.USART_BaudRate=115200;//波特率
Uart_Initsturte.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //无硬控制流
Uart_Initsturte.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //收发模式
Uart_Initsturte.USART_Parity=USART_Parity_No ; // 无校验位
Uart_Initsturte.USART_StopBits= USART_StopBits_1 ; //停止位
Uart_Initsturte.USART_WordLength=USART_WordLength_8b ; //数据长度位
USART_Init(USART1,&Uart_Initsturte); //结构体写入寄存器
USART_StructInit(&Uart_Initsturte);
//复用推挽
GPIO_Initsture.GPIO_Pin=GPIO_Pin_9;
GPIO_Initsture.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Initsture.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,& GPIO_Initsture);
GPIO_Initsture.GPIO_Pin=GPIO_Pin_10;
GPIO_Initsture.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入,因为是要从电脑写到单片机
GPIO_Init(GPIOA,& GPIO_Initsture);
USART_Cmd(USART1,ENABLE); //开启串口
USART_ClearFlag(USART1,USART_FLAG_TC); //清除标志位
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //开启中断标志位
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组
NVIC_INitstrute.NVIC_IRQChannel= USART1_IRQn ; //打开UART1的中断
NVIC_INitstrute.NVIC_IRQChannelCmd=ENABLE;
NVIC_INitstrute.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级
NVIC_INitstrute.NVIC_IRQChannelSubPriority=1; //响应优先级
NVIC_Init(&NVIC_INitstrute);
}
void USART_SendByte(USART_TypeDef* USARTx, uint16_t Data) //利用函数发送数据到电脑
{
USART_SendData(USARTx,Data);
while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE) != SET);
}
//这个是串口中断号,可以在电脑发送到单片机,在发送回电脑显示出发送的数据
void USART1_IRQHandler (void)
{
u16 r;
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //接收中断
{
r=USART_ReceiveData(USART1);
USART_SendData(USART1,r);
}