程序如下:
void USART_SendOneByte(uint16_t dat)
{
USART_SendData(USART1, dat);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
}
uint8_t Uart_PutChar(uint8_t ch)
{
/* Write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
return ch;
}
uint16_t USART_RecOneByte()
{
uint16_t datRec1;
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
{
datRec1 = USART_ReceiveData(USART1);
}
return datRec1;
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// datSend[0]=0x01;
// datSend[1]=0x02;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); /*使能LED灯使用的GPIO时钟*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); /*神舟I号使用的LED灯相关的GPIO口初始化*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); /*关闭所有的LED指示灯*/
GPIO_SetBits(GPIOB,GPIO_Pin_2);
// 配置串口参数
/*
USART_InitStructure.USART_BaudRate = 9600;
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;
*/
RCC_APB2PeriphClockCmd (RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);
USART_ClockStructInit(&USART_ClockInitStructure);
USART_StructInit(&USART_InitStructure);//装填默认值
USART_ClockInit(USART1,&USART_ClockInitStructure);
//STM_EVAL_COMInit(COM1, &USART_InitStructure);
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); /*打开所有的LED指示灯*/
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
while (1)
{
// USART_SendData(USART1, 0x01);
// while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
// USART_ClearITPendingBit(USART1, USART_IT_TXE);
// Delay(500);
datRec=USART_RecOneByte();
if( datRec==0x01)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); //关闭所有的LED指示灯
GPIO_SetBits(GPIOB,GPIO_Pin_2);
USART_SendOneByte(datRec);
// for(i=0;i<2;i++)
// {
// Uart_PutChar(datSend[i]);
// }
}
else if(datRec==0x02)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); //打开所有的LED指示灯
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
//USART_SendOneByte(datRec);
Uart_PutChar(datRec);
}
}
}
1)以上程序能收到数据,但是发送数据到PC端,PC接收不到数据。
2)还有比较奇怪的问题,在0x01判断的程序里面,如果发送一个数组,编译之后接受也不能接受数据了。
以上程序请各位帮忙看看,本人刚接触ARM。 |