这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » LM3S811学习笔记(UART补充内容)

共5条 1/1 1 跳转至

LM3S811学习笔记(UART补充内容)

高工
2012-11-01 23:35:16     打赏

实验内容:微控制器接收上位机数据,接收完成后,将接收到的数据原样送回上位机
实验目的:进一步熟悉UART的应用。
感受:此部分内容还有很大一部分没有搞清楚,其中还牵扯到C语言的基础知识,以及串口通讯间速率匹配的问题。

#include "main.h"
void UARTInit(void)
{
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//使能外设A端口R/T
   SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);   //使能串口外设
   GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); //使能串口GPIO脚
  
   //UART配置  UART0 串口时钟为系统时钟  波特率9600 8位数据位 1位停止位 无奇偶校验
   UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,(UART_CONFIG_WLEN_8  | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));

   //UARTFifoLevelSet(UART0_BASE,8,8);//FIFO出发深度
   IntEnable(INT_UART0); //使能串口中断
   IntMasterEnable();    //使能全局中断
   //UARTIntEnable(UART0_BASE,UART_INT_RX | UART_INT_TX);//使能串口接收和发送中断
   //IntPrioritySet(INT_UART0,0);//设置中断优先级
   UARTEnable(UART0_BASE);       //使能串口(uart0) 发送和接收
}

//接收上位机数据
unsigned int i=0;
//全局变量的数组必须给定其大小,否则的话系统将不会给其分配存储空间
unsigned char s[32];

void UARTReceive(void)
{
  while(UARTCharsAvail(UART0_BASE))
  {
    s[i++]=UARTCharGetNonBlocking(UART0_BASE);
  }
}

void UARTSend(const unsigned char *str,unsigned long ulcount)
{
    while(*str!='\0')
    {
      if(UARTSpaceAvail(UART0_BASE))
      {
         UARTCharPutNonBlocking(UART0_BASE, *str); 
//成功发送则返回true;若FIFO中没有可用空间则返回False,稍后再次尝试。P212
         str++;
         ulcount--;
      }
    }
    i=0;
}

/*************************************************
**本代码实现的功能为接收上位机数据后原样送回上位机
*************************************************/
void main(void)
{
   Bsp_Init();//其内包含JTAG保护和系统时钟配置代码
  
   UARTInit();
    
   while(1)
   {
     UARTReceive();  
     SysCtlDelay(SysCtlClockGet());  //延时1S
     unsigned long count=strlen(s);
     UARTSend(s,count);
   }
}

//调试之初,在While(1)的死循环中,实现收发。串口调试器设为1S自动发送,
//发现收到的数据有间隔,且无规则,后来怀疑是收发速度不匹配的问题,
//随在接收数据函数后加1S钟延时函数,此时发现串口调试器收到的数据仍然是杂乱的
//几经周折后将自动发送去掉,改为手动发送,随出现了预期的结果。
//之后考虑不是自动发送的问题,可能是发送频率过高所致,遂将发送周期改为3000Ms
//此时亦可达到预期效果
//师兄点睛:全局变量的数组定义时必须给定其大小,否则的话系统将不会给其分配存储空间
//后来将全局的数组去掉其大小,发现能收预期数据,但在预期数据后有一堆乱码。

 




关键词: LM3S811     学习     笔记     补充     内容     UART0    

院士
2012-11-05 13:01:44     打赏
2楼
楼主 初学的劲头要保持。 加油~~

助工
2012-11-05 13:15:11     打赏
3楼
感谢楼主的资料分享!

高工
2012-11-05 23:32:45     打赏
4楼
既然没得选就走下去吧,多谢斑竹主持

高工
2012-11-05 23:33:59     打赏
5楼
共同交流学习啊,哈哈哈

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]