
牛人请指点下 串口初始化 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 )在发送第一个字节时会出现数据丢失; |
STM32会存在单个IO口坏掉的情况吗?
STM32L431偶发串口乱码问题。
求助,使用51单片机和VL6180X传感器测距,结果一直是0是什么原因,能读到ID为0xB4
STM8S003无法检测到引脚电平
STM8 @svlreg 问题
在使用nucleo H7开发版 USART2发送数据测试的时候,RTS脚产生与TX脚一样的伴随波形,波形与TX脚一致
STM32G070RET6,中断优先级配置没有效果
STM32H743VIT6 HAL 串口DMA发送掉帧
STM32G474CBT6 串口通信问题
I2C从模式编程之STOP中断
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
{
UART1_RX_BUF = USART_ReceiveData8(USART1);
UART1_SendByte(UART1_RX_BUF );
}
这里有问题吧?没接收完成就开始发送了?
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
Uart1_Init(); //串口1初始化
后面加一句:
USART_GetITStatus(USART1, USART_FLAG_TC);
评分
查看全部评分
评分
查看全部评分
初始化串口的最后加一个清标志动作.这个应该是你的问题3
USART_ClearFlag(USART3,USART_FLAG_TC); //清发送完成标志, 否则第一个发不出
1,2其实都是一个问题,你可试下在初始后串口的最后读一下串口试试.
评分
查看全部评分
还有 UART1_RX_BUF是什么类型的?是uiint8_t或者u8类型么?
评分
查看全部评分
评分
查看全部评分
问题出在这里。USART_ClearFlag(USART3,USART_FLAG_TC); ==>改为查TXE
这里描述的比较清楚。一个关于USART 传输标志TXE/TC 的话题
评分
查看全部评分