使用芯片:STM32F103C8T6
问题1: 串口助手一打开,IO口变为高电平,而且不能输出正常电平。不知道是不是硬件电路原因。
用的是USB转串口,连接的电路如下:
上图中,TXD和TXD-U相连,RXD 和RXD-U相连,然后再接到分别接到STM32的TXD1 、RXD1,如下
问题2:烧程序进去后,利用串口助手调试,发现串口助手接受到的部分数据有丢失且有乱码,且不STM32无法收到串口发送的数据:
程序如下:
int main(void)
{
#ifdef DEBUG
debug();
#endif
RCC_Configuration(); //配置系统时钟
NVIC_Configuration(); //NVIC配置
GPIO_Configuration(); //GPIO端口配置
//串口配置: 波特率 115200 数据位 8 停止位 1 奇偶位 NONE
USART_InitStructure.USART_BaudRate = 9600;
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; //发送接收使能
//初始化串口
USART_Init(USART1, &USART_InitStructure);
//启动串口
// USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
GPIO_Write(GPIOB,0xef0f);
while (1)
{
Uart1_PutString("ST科技推出ARM/STM32带您进入32位处理世界 " ,42 );
Delay(0x00ffff);
}
}
void Delay(u32 nCount)
{
for(; nCount != 0 ; nCount--);
}
/*******************************************************************************
* Name : Uart1_PutString
* Deion : print a string to the uart1
* Input : buf为发送数据的地址 , len为发送字符的个数
*******************************************************************************/
void Uart1_PutString(u8* buf , u8 len)
{ u8 i;
for(i=0;i<len;i++)
{
USART_SendData(USART1,*buf++);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
Delay(0x0000ff);
}
}
串口助手情况:
到这里,可以说STM32能够发给串口助手数据,但是这过程有异常。
接下来,试验串口发送数据给STM32让其返回一个信号。程序改动如下:
int main(void)
{
RCC_Configuration(); //配置系统时钟
NVIC_Configuration(); //NVIC配置
GPIO_Configuration(); //GPIO端口配置
//串口配置: 波特率 115200 数据位 8 停止位 1 奇偶位 NONE
USART_InitStructure.USART_BaudRate = 9600;
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; //发送接收使能
//初始化串口
USART_Init(USART1, &USART_InitStructure);
//启动串口
// USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
GPIO_Write(GPIOB,0xef0f);
while (1)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
{
USART_ClearFlag(USART1, USART_FLAG_RXNE);
USART_SendData(USART1,0x0079);
GPIO_Write(GPIOB,0xfef0);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
}
这次是用串口助手给STM32发数据,但是STM32不能及时将79发给串口小助手了。。。
搞了很长时间,都不明白是怎么回事。不知道是硬件原因还是程序问题。
希望大家帮忙看下,在此谢谢
|