小弟 ,现在做一个用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);
}
}
|