STM32F107串口1和串口2通信

2019-03-23 19:45发布

STM32F107串口1和串口2通信 串口2发送数据,串口1接收数据,为什么串口1接收到的数据只有第一个字节???#include "stm32f10x.h"#include "stm32_eval.h"#include <stdio.h>
/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Constants used by Serial Command Line Mode */#define CMD_STRING_SIZE       128USART_InitTypeDef USART_InitStructure;void GetInputString (uint8_t * buffP);uint8_t GetKey(void);uint32_t SerialKeyPressed(uint8_t *key);void SerialPutChar(uint8_t c); void USART_Configuration(void);void Put_String(u8 *p);int main(void){  uint8_t inputstr[CMD_STRING_SIZE];   u8 str[]={"1234abcd1234"}; USART_Configuration();
 // Put_String(inputstr);   while (1)  {  Put_String(str);      GetInputString(inputstr);  }}
void USART_Configuration(void){   USART_InitStructure.USART_BaudRate = 115200;  //串口2  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_Tx;
  /* 完成串口时钟配置、GPIO配置、根据上述参数初始化并使能串口 */  STM_EVAL_COMInit(COM1, &USART_InitStructure);  //串口1  USART_InitStructure.USART_BaudRate = 115200;  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;  STM_EVAL_COMInit(COM2, &USART_InitStructure);}void GetInputString (uint8_t * buffP){  u32 bytes_read = 0;  u8 c = 0;    do  {    c = GetKey();    if (bytes_read >= (CMD_STRING_SIZE))    {      bytes_read = 0;     // continue; break;    }    if (c >= 0x20 && c <= 0x7E)    {      buffP[bytes_read++] = c;       }  }  while (c!='');  buffP[bytes_read] = '';} 
/**************************************************/ void Put_String(u8 *p) //USART2发送字符串{ while(*p) {     USART_SendData(USART2, *p++);     while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)     { } } }
u32 SerialKeyPressed(u8 *key)  //USART1接收数据{

  if ( USART_GetFlagStatus(EVAL_COM2, USART_FLAG_RXNE) != RESET)  {    *key = (u8)EVAL_COM2->DR & 0xFF;    return 1;  }  else  {    return 0;  }}
/**  * @brief  Wait untill Get a key from the HyperTerminal  * @param  None  * @retval The Key Pressed  */u8 GetKey(void)   //接收数据{  u8 key = 0;
  /* Waiting for user input */  while (1)  {    if (SerialKeyPressed((u8*)&key)) break;  }  return key;}#ifdef  USE_FULL_ASSERTvoid assert_failed(u8* file, u32 line){   while (1)  {  }}#endif
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。