打印
[ZLG-MCU]

LM3S615串口发送数据

[复制链接]
2634|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
esonxy|  楼主 | 2008-3-25 20:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
liujigan| | 2008-3-25 20:28 | 只看该作者

把程序贴出来,要发数据的格式介绍一下

使用特权

评论回复
板凳
esonxy|  楼主 | 2008-3-26 12:53 | 只看该作者

程序

/*******************************************************************************************************/
#define KEY1 GPIO_PIN_4
#define UART0_PIN GPIO_PIN_0 | GPIO_PIN_1
/*******************************************************************************************************/
static volatile const unsigned char *g_pucBuffer = 0;                    // 发送数据缓冲区指针
static volatile unsigned long g_ulCount = 0;                            // 发送数据个数

static  unsigned char g_pucString[2];
/*******************************************************************************************************/
void WaitJTAG(void)           //防JTAG失效代码
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
  GPIODirModeSet(GPIO_PORTD_BASE,KEY1,GPIO_DIR_MODE_IN);
  if(GPIOPinRead(GPIO_PORTD_BASE,KEY1)==0x00)
  {
    for(;;);
  }
  SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOD);
}
/*******************************************************************************************************/
void Initial(void)                                                              //初始化模块
{
  //初始化ADC模块
  SysCtlClockSet(SYSCTL_SYSDIV_10|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ);
                                                                                //配置PLL                                                                  
  SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);                       // 使能ADC模块的时钟
  SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS);                      // 250KSps采样率
  ADCSequenceDisable(ADC_BASE, 0);                                  // 禁能所有采样序列
  ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);                     // 采样序列0为处理器触发
  ADCSoftwareOversampleConfigure(ADC_BASE, 0, 2);                               //2倍过采样
  ADCSoftwareOversampleStepConfigure(ADC_BASE, 0, 0,ADC_CTL_CH0|ADC_CTL_END);   // 采样序列0的第0步使用ADC0,完成第0步后结束 
  ADCSequenceEnable(ADC_BASE, 0);                          // 使能采样序列0
  //初始化UART模块
  SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  IntMasterEnable();
  GPIODirModeSet(GPIO_PORTA_BASE, UART0_PIN, GPIO_DIR_MODE_HW);
  UARTConfigSet(UART0_BASE,9600,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
                                                                                // 配置UART 为 9600波特率, 8-N-1模式发送数据。
  UARTIntEnable(UART0_BASE, UART_INT_TX);
  IntEnable(INT_UART0);
}
/*******************************************************************************************************/
void UART0_ISR (void)                                                    // UART0中断服务函数
{
    unsigned long ulStatus;
    ulStatus = UARTIntStatus(UART0_BASE, true);                           // 获得中断状态。
    UARTIntClear(UART0_BASE, ulStatus);                                 // 清除等待响应的中断。
    if(ulStatus & UART_INT_TX)                                          // 检查是否有未响应的传输中断。
    {
            while(g_ulCount && UARTSpaceAvail(UART0_BASE))                 // 处理传输中断。
            {
                UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++);     // 发送下一个字符。
                g_ulCount--;                                            // 发送字符数自减。
            }
    }
}

void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)    // 发送数据处理函数
{
    while(g_ulCount);                                                    // 等待,直到之前的字符串发送完毕。
    g_pucBuffer = pucBuffer;                                              // 保存待传输的数据缓冲。
    g_ulCount = ulCount;                                                // 保存计数值。
   // 当FIFO没有空间或g_ulCount==0时退出
    while(UARTSpaceAvail(UART0_BASE)&&g_ulCount)                        // 处理传输中断。
    {
        UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++);                // 发送下一个字符。
        g_ulCount--;                                                    // 发送字符数自减。
    }
    }
/*******************************************************************************************************/
 int main(void)
{
  WaitJTAG();
  Initial();
  unsigned long ulData = 0;
  while(1)
     {
          ADCProcessorTrigger(ADC_BASE, 0);                               // 处理器触发采样序列0
        while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );      // 等待FIFO 0为非空,即等待转换结束
        ADCSequenceDataGet(ADC_BASE, 0, &ulData);                         // 读出10位转换结果
           g_pucString[0]=ulData&0x000000ff;
                g_pucString[1]=ulData>>8;
                UARTSend(g_pucString, sizeof(g_pucString)); 
                UARTDisable(UART0_BASE);
                UARTEnable(UART0_BASE);
         }
}
/*******************************************************************************************************/

使用特权

评论回复
地板
liujigan| | 2008-3-26 13:35 | 只看该作者

re

去掉那 UARTDisable(UART0_BASE);
    UARTEnable(UART0_BASE);
在这位置做一下延时
              

使用特权

评论回复
5
lujiang006| | 2008-3-26 14:57 | 只看该作者

DEMO例程里面的UART_send

问下大家:
DEMO例程里面的UART_send发送的数据用WINDOWS自带的"超级终端"软件可以接收,为什么不能用网上下载的串口调试工具软件接收

使用特权

评论回复
6
lujiang006| | 2008-3-26 16:19 | 只看该作者

DEMO例程里面的UART_send

呵呵........
DEMO例程里面的UART_send发送的数据用也串口调试工具软件接收
不小心将接收模式设置错了

使用特权

评论回复
7
esonxy|  楼主 | 2008-3-26 22:37 | 只看该作者

谢谢了

谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

25

帖子

0

粉丝