本帖最后由 DFH 于 2015-11-13 17:35 编辑
最近一段时间,在弄STM32F205RB芯片的串口通讯,出现了通讯乱码这一个大问题。 我自己处理了好久,还是解决不了,前来求助!
在我使用4M的外部晶振的时候,通过串口助手设置相同的波特率的时候打印出来的字符OK. 但是我这边要求用的晶振是25MHz, 使用25MHz的时候会出现乱码, 然后我试了8,12M的都是一样 出现乱码,为什么?
然后我上网找了好多类似的资料,定位到串口通讯中系统时钟与波特率有关系。我就想着去修改串口1的系统时钟,但是跳到systeminit函数里面去的时候,我找不到串口1的时钟源,只能找到AHB时钟,还有不知道怎么修改?
我现在想要的是,能使用任意的晶振,都能实现串口通讯,来高手,帮下忙,求助!!。
我的程序如下:
usart.c#include "main.h"
void GPIO_Init_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOA, &GPIO_InitStructure); }
void USART_Init_Configuration(void) { USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE);
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; USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE); }
int fputc(int ch,FILE *f) //为了使用printf(); 重定义 { USART_SendData(USART1,(unsigned char) ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET); return (ch); }
main.c
int main(void)
{
GPIO_Init_Configuration(); //GPIO配置
USART_Init_Configuration();//usart1配置
while (1)
{
printf("55");
printf("AA");
}
}
|