初级会员

- 积分
- 74
- 金钱
- 74
- 注册时间
- 2014-5-21
- 在线时间
- 4 小时
|
1金钱
我给'STM32F103C8T6编写串口程序,发送其他字符什么的都没问题,至要发\n或者0x0a,在电脑上接受的就是ERROR。请教各位大侠。
static volatile ErrorStatus HSEStartUpStatus = SUCCESS;
/** @addtogroup STM32F10x_StdPeriph_Examples
* @{
*/
/** @addtogroup USART_Printf
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Constants used by Serial Command Line Mode */
#define CMD_STRING_SIZE 128
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
USART_InitTypeDef USART_InitStructure;
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name : Delay
* Description : Inserts a delay time.
* Input : nCount: specifies the delay time length.
* Output : None
* Return : None
*******************************************************************************/
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
/**
* @brief Main program
* @param None
* @retval None
*/
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
//FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
/* Enable USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
}
void STM_EVAL_COMInit(unsigned char COM, USART_InitTypeDef* USART_InitStruct)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIO clock */
// RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);
// if (COM == COM1)
// {
// RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
// }
// else
// {
// /* Enable the USART2 Pins Software Remapping */
// GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
// RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
// }
/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART Rx as input floating */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* USART configuration */
if(COM == 1)
USART_Init(USART1, USART_InitStruct);
else if(COM == 2)
USART_Init(USART2, USART_InitStruct);
/* Enable USART */
if(COM == 1)
USART_Cmd(USART1, ENABLE);
else if(COM == 2)
USART_Cmd(USART1, ENABLE);
}
void USART1_SendByte(char SendChar)
{
USART_SendData(USART1,SendChar);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
USART_ClearFlag(USART1,USART_FLAG_TXE);
}
void ESPtoStrSend( char *pStr)
{
while(*pStr)
{
USART1_SendByte(*pStr);
pStr++;
}
USART_SendData(USART1,'\n');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
USART_ClearFlag(USART1,USART_FLAG_TXE);
USART1_SendByte(0x0a);
USART1_SendByte(0x0d);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_Structure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
//LED-->>PC6 U1_TX-->PA9 U1_RX-->>PA10 U2_TX-->>PA2 U2_RX-->>PA3
GPIO_Structure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_9;
GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_Structure); //USART_AFIO_Config
GPIO_Structure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_10;
GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOA,&GPIO_Structure);
GPIO_Structure.GPIO_Pin = GPIO_Pin_6;
GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_Structure); //LED4 Config
}
void USART_Config(void)
{
USART_InitTypeDef USART_Structure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
USART_Structure.USART_BaudRate = 115200;
USART_Structure.USART_WordLength = USART_WordLength_8b;
USART_Structure.USART_StopBits = USART_StopBits_1;
USART_Structure.USART_Parity = USART_Parity_No;
USART_Structure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART1,&USART_Structure);
USART_Cmd(USART1,ENABLE);
USART_Structure.USART_BaudRate = 115200;
USART_Structure.USART_WordLength = USART_WordLength_8b;
USART_Structure.USART_StopBits = USART_StopBits_1;
USART_Structure.USART_Parity = USART_Parity_No;
USART_Structure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART2,&USART_Structure);
USART_Cmd(USART2,ENABLE);
}
int main(void)
{
// // ÅäÖÃ′®¿ú2Îêy
// /* USARTx configured as follow:
// - BaudRate = 115200 baud
// - Word Length = 8 Bits
// - One Stop Bit
// - No parity
// - Hardware flow control disabled (RTS and CTS signals)
// - Receive and transmit enabled
// */
RCC_Configuration();
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 | USART_Mode_Tx;
STM_EVAL_COMInit(1, &USART_InitStructure);
// /* Output a message on Hyperterminal using printf function */
//GPIO_Config();
//USART_Config();
while(1)
{
USART_SendData(USART1,'A');
USART_SendData(USART1,'B');
USART_SendData(USART1,'C');
USART_SendData(USART1,'D');
USART_SendData(USART1,'E');
USART_SendData(USART1,'\n');
USART_SendData(USART1,'F');
USART_SendData(USART1,'G');
USART_SendData(USART1,'H');
}
}
|
|