牛人请指点下
串口初始化
void Uart1_Init(void)
{
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortA, ENABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast);//TXD
GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_In_PU_No_IT);//RXD
GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE);
GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE);
// USART_DeInit(USART1); //复位UART1
/*
* 将UART1配置为:
* 波特率 = 38400
* 数据位 = 8
* 1位停止位
* 无校验位
* 使能接收和发送
*/
USART_Init(USART1, (u32)38400, USART_WordLength_8b, USART_StopBits_1,
USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx);
}
数据发送
void UART1_SendByte(u8 data)
{
USART_SendData8(USART1, data);
/* 等待传输结束 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
main()
{
u8 UART1_RX_BUF;
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_8);
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET); //2MHZ内部晶振
Uart1_Init(); //串口1初始化
while(1)
{
/* 等待接收完成 */
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
{
UART1_RX_BUF = USART_ReceiveData8(USART1);
UART1_SendByte(UART1_RX_BUF );
}
}
以上就是所有程序,
目前问题是:
1.在用电脑串口助手发送数据时,如果一次只发送一个字节,则UART1_RX_BUF = USART_ReceiveData8(USART1)接收的是错误的数据,
2.只有在一次发送数据在两个字节以上时UART1_RX_BUF = USART_ReceiveData8(USART1)接收的数据从第二个字节开始才是准确的,
3. UART1_SendByte(UART1_RX_BUF )在发送第一个字节时会出现数据丢失;
2024-5-8 16:37:01
在初始化命令
Uart1_Init(); //串口1初始化
后面加一句:
USART_GetITStatus(USART1, USART_FLAG_TC);
在初始化命令
Uart1_Init(); //串口1初始化
后面加一句:
USART_GetITStatus(USART1, USART_FLAG_TC);
举报
2024-5-8 16:37:10
在while(1)循环中,在 UART1_RX_BUF = USART_ReceiveData8(USART1);之后再加一句判断是否接收完,接收完才进入发送,没有接收完则继续等待接收完为止才执行下一步
在while(1)循环中,在 UART1_RX_BUF = USART_ReceiveData8(USART1);之后再加一句判断是否接收完,接收完才进入发送,没有接收完则继续等待接收完为止才执行下一步
举报