您的位置:首页 > 其它

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

2017-03-10 21:29 423 查看
功能:上位机发送给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 串口通信