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

2 篇文章 0 订阅
1 篇文章 0 订阅
功能:上位机发送给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)

皇图霸业谈笑中,不胜今宵一场醉...
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值