关于“使用XCOM串口助手向单片机发送指令、单片机回复了重复多次”的问题
最近在复习stm32串口通信时,简单包装了个接收串口数据的函数,并重定向了printf发送函数。测试功能大致是:XCOM(PC主机)像单片机发送一串字符后,单片机每接收一段即立刻向PC端回复一串字符串作为调试消息。测试代码如下有:
bsp_usart.c
——————————
#include "bsp_usart.h"
#include <stm32ff10x.h>
void Bsp_Usart1_Init(uint32_t bps)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
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);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = bps;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
//打开串口1
}
void USART1_SendByte(uint8_t value)
{
USART_SendData(USART1,value);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
uint8_t USART1_ReceiveByte(void)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
{
USART_ClearFlag(USART1,USART_FLAG_RXNE);
return USART_ReceiveData(USART1);
}
return 0;
}
#if 1
#pragma import(__use_no_semihosting)
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x) //这里有的版本没有void会导致错误
{
}
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//重定向fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR & 0x40)==0); //循环发送,直到发送完毕
USART_SendData(USART1,(uint8_t)ch);
return ch;
}
#endif
|
———————————————— 版权声明:本文为CSDN博主「White Petals Uzid With Blue」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/LXT13592800607/article/details/134041223