usart 串口的发送-接收数据(正点改编)

    xiaoxiao2021-03-25  105

    功能:上位机发送给mcu,mcu原原本本发送给上位机 **main关键代码** while(1) { if(flag==1) { len=usart_sta&0xffff;//接收数据长度,&0xffff 可以省略 for(t=0;t<len;t++) { Uart1_PutChar(usart_array[t]); } printf("\r\n"); flag=0; usart_sta=0; } else times++; if(times%30==0) LED0=!LED0; delay_ms(10); } **usart.h关键代码** #define usart_len 10 //定义最大接收字节数 extern u8 usart_array[usart_len]; //接收缓冲 extern u8 usart_sta; //接收n位的判断 extern u8 flag; //标志位 **usart.c关键代码** u8 usart_array[usart_len]; u8 flag=0; u8 usart_sta=0; void Uart1_PutChar(u8 ch) { USART_SendData(USART1,ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); } //USART_GetITStatus(USART1, USART_IT_RXNE) == SET void USART1_IRQHandler(void) //串口1中断服务程序,固定的函数名,在startup_stm32f10x_hd.s { u8 Res; if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //接收中断 { Res=USART_ReceiveData(USART1); //读取接收到的数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//这个可有可无 if(flag==0)//标志位 { usart_array[usart_sta&0xffff]=Res;//按位存储,可以去掉&0xffff,加上方便理解 usart_sta++; if(usart_sta>usart_len)//设置数据存放数据的上限 { usart_sta=0; printf("\r\n输入错误\r\n"); } if(Res==0x0d)//判段是否收到回车键,回车键表示发送 { flag=1; } } } } USART设置步骤: 1.开启串口、GPIO时钟 2.串口引脚初始化(TX/RX) 3.NVIC配置(优先级/通道..) 4.USART初始化设置(波特率/字长/奇偶校验..) 5.开启串口的中断方式(TC/RXNE..) 6.使能串口 【7.中断处理函数】(函数名在startup_stm32f1010x_hd.s) 皇图霸业谈笑中,不胜今宵一场醉...
    转载请注明原文地址: https://ju.6miu.com/read-25495.html

    最新回复(0)