打印
[STM32]

关于示波器和stm32串口通信的问题 请大家多多指教

[复制链接]
1594|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hujieuestc|  楼主 | 2013-11-20 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟 ,现在做一个用stm32和示波器串口通信的实验。希望通过stm32的串口向示波器发送ID?命令,然后示波器会返回参数:ID TEK/TDS 1002,CF:91.1CT,FV:V1.09 TDS2CMA:CMV:V1.04 到stm32液晶屏上显示出来。现在我的程序 只能实现在液晶屏上出现几个斑点 但是没有返回参数。请各位看看是什么问题。串口的设置都是标准的设置,在stm32和示波器 双方都是设置的标准串口,波特率9600,没有奇偶校验位等。我把程序粘贴到下面 希望大家帮忙看看是什么问题 。谢谢了
void USART1_Init(unsigned int baud)
{
    USART_InitTypeDef USART_InitStructure;

    USART_InitStructure.USART_BaudRate = baud;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_Cmd(USART1, ENABLE);
}

/*****************************************************************

          从 USART1 发送一个字节

*****************************************************************/
void USART1_SendByte(unsigned char temp)
{
    USART_SendData(USART1, temp);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}


// void USART_SendStr(USART_TypeDef* USARTx,const char * data)
//{
//        u16 i;
//        u16 len = strlen(data);
//        for (i=0; i<len; i++)
//        {
//                USART_SendByte(USARTx,data[i]);
//        }
//}
/*****************************************************************

          从 USART1 发送字符串

*****************************************************************/
void USART1_Printf(char *pch)
{
    while(*pch != '\0'){
        USART1_SendByte(*(unsigned char *)pch);
        pch++;
    }
}



/******************************************
*
*             LD1~LD4跑马灯
*
****************************************/
void LED1234_ON_OFF(unsigned char Num)
{
        switch (Num) {
                case 0:
                GPIO_SetBits(GPIOD,   GPIO_Pin_8);
                GPIO_ResetBits(GPIOD, GPIO_Pin_9);
                GPIO_ResetBits(GPIOD, GPIO_Pin_10);
                GPIO_ResetBits(GPIOD, GPIO_Pin_11);
                break;

                case 1:
                GPIO_ResetBits(GPIOD, GPIO_Pin_8);
                GPIO_SetBits(GPIOD,   GPIO_Pin_9);
                GPIO_ResetBits(GPIOD, GPIO_Pin_10);
                GPIO_ResetBits(GPIOD, GPIO_Pin_11);
                break;

                case 2:
                GPIO_ResetBits(GPIOD, GPIO_Pin_8);
                GPIO_ResetBits(GPIOD, GPIO_Pin_9);
                GPIO_SetBits(GPIOD,   GPIO_Pin_10);
                GPIO_ResetBits(GPIOD, GPIO_Pin_11);
                break;

                case 3:
                GPIO_ResetBits(GPIOD, GPIO_Pin_8);
                GPIO_ResetBits(GPIOD, GPIO_Pin_9);
                GPIO_ResetBits(GPIOD, GPIO_Pin_10);
                GPIO_SetBits(GPIOD,   GPIO_Pin_11);
                break;

                default:
                break;
        }
}

/******************************************
*
*             延时程序 ms
*
****************************************/
void Delay(unsigned short time)
{
    unsigned short i, j;
       
        for(; time > 0; time--){
            for(j = 0; j < 10; j++){
                    for(i = 0; i < 1000; i++);
                }
        }

}

/*******************************************************

                MAIN 函数

*******************************************************/
int main(void)
{       
       
    char b;        char e[20]; int ii=0;
         u16 charColor = Yellow;
     u16 bkColor = Red;
            u16 len;
           len = sizeof(e)-1;
    SysClock_Init();                 // 初始化系统时钟 72MHZ
        RCC_Configuration();         //        使能外设
        GPIO_Configuration();         //        配置引脚
        NVIC_Configuration();         // 配置中断

    Lcd_Configuration();         //        配置LCD
    ili9320_Initializtion(); //        初始化ili9320
    ili9320_Clear(0x3333);         //        清屏
       
        USART1_Init(9600);                 // 配置串口1,波特率9600
//        USART1_Printf("火牛开发板基础实验");


//        USART1_Printf("ID");

  while(1)       
{
   USART1_Printf("ID?");

   if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
       
        {                         
         
          for(ii=0;ii<20;ii++)
          { b = USART_ReceiveData(USART1);                                 
           e[ii] = b;                                                                          
           USART_SendData(USART1, e[ii]);
          }
             
         }                                       

        ili9320_PutChar(0,20, e[0],charColor, bkColor);
        ili9320_PutChar(20,20,e[1],charColor, bkColor);
        ili9320_PutChar(40,20,e[2],charColor, bkColor);
        ili9320_PutChar(60,20,e[3],charColor, bkColor);       
   }

}       
       
       

相关帖子

沙发
阿南| | 2013-11-21 07:30 | 只看该作者
先用PC机和示波器通信试试,这样可搞清楚示波器这边的协议

使用特权

评论回复
板凳
airwill| | 2013-11-21 18:22 | 只看该作者
只能实现在液晶屏上出现几个斑点 , 会不会你的液晶驱动或者连接信号有问题呢?

使用特权

评论回复
地板
hujieuestc|  楼主 | 2013-11-22 13:51 | 只看该作者
额 ,可不可以 帮我修改下程序,然后贴出来大家分享,谢谢

使用特权

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

本版积分规则

4

主题

9

帖子

0

粉丝