功能:上位机发送给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)
皇图霸业谈笑中,不胜今宵一场醉...
usart 串口的发送-接收数据(正点改编)
最新推荐文章于 2024-06-03 20:18:18 发布