打印

STM32串口波特率问题

[复制链接]
10892|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淡然如水|  楼主 | 2011-7-15 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大虾,不知是什么原因,代码中明明写的是9600的波特率,用串口助手接收的却是乱码,改成4800就正常了,写4800波特率的时候,用2400接收就正常了
部分代码如下:
           void USART_Configuration(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef  USART_InitStructure;
USART_ClockInitTypeDef  USART_ClockInitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //选择GPIO的引脚 TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //GPIO输出模式:推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //GPIO输出频率:2MHZ
GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIOA初始化

// USART_InitTypeDef USART_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1 , ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
USART_InitStructure.USART_BaudRate = 4800;
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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit= USART_LastBit_Disable;
USART_ClockInit(USART1,&USART_ClockInitStructure);
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);

}
上面是串口配置部分


void USART1_Puts(char * str)
{
    while(*str)
    {
        USART_SendData(USART1, *str++);
        /* Loop until the end of transmission */
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    }
}
发送函数






void RCC_Configuration(void)
{
u8 RCC_flag = 0;
while(!RCC_flag)
{
ErrorStatus HSEStartUpStatus;
RCC_HSEConfig(RCC_HSE_ON); //使能HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE就绪
if(HSEStartUpStatus == SUCCESS) //如果HSE就绪,跳出while
RCC_flag = 1;
else
RCC_flag = 0;
}
}
时钟配置



int main(void)
{
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
USART1_Puts("Hellow\n");
            //   USART1_Puts("神舟1号\n");
Delay(0x5fffff);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
Delay(0x5fffff);
}

  

}

在主程序中不断地发数据,并且让灯闪烁
沙发
dzh_fly| | 2011-7-18 12:05 | 只看该作者
程序上看不出问题啊,你用几种串口助手查看过啊

使用特权

评论回复
板凳
淡然如水|  楼主 | 2011-7-18 15:32 | 只看该作者
两种

使用特权

评论回复
地板
淡然如水|  楼主 | 2011-7-18 15:35 | 只看该作者
问题解决了,把target options里#define里的STM32F10X_HD_VL改成STM32F10X_MD就正常了(我用的是中密度器件),不过不知道为什么这样改,看它的库看的晕头转向

使用特权

评论回复
5
Chaos_zc| | 2011-8-6 00:47 | 只看该作者
本帖最后由 Chaos_zc 于 2011-8-6 00:51 编辑
00061 /* Uncomment the line below according to the target STM32 device used in your
00062 application
00063 */
00064
00065 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
00066 /* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
00067 /* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
00068 /* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
00069 /* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
00070 /* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
00071 /* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
00072 /* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
00073 /* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
00074 #endif
00075 /* Tip: To avoid modifying this file each time you need to switch between these
00076 devices, you can define the device in your toolchain compiler preprocessor.

看库里面的stm32f10x.h文件,里面很多内容与系统时钟的配置有关。该文件会根据选择的芯片类型来进行时钟配置,要在此位置将选用的芯片类型去掉注释符。当然不想每次修改此文件,比较方便的方法就是你所说是在编译器的target options选项框中define。。。效果一样。

使用特权

评论回复
6
淡然如水|  楼主 | 2011-8-9 17:32 | 只看该作者
谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

1

粉丝