OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8357|回复: 11

stm32内部时钟启动,串口乱码

[复制链接]

36

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-4-22
在线时间
36 小时
发表于 2016-3-14 14:39:49 | 显示全部楼层 |阅读模式
1金钱
使用HSI作为系统时钟,倍频后得到64M的频率,在去调用原子哥的串口初始化函数,设置波特率为9600,发现串口打印出来的全是乱码,估计是时钟的问题,请教各位,系统时钟修改,还需要对串口时钟进行设置吗

做技术的一定要谦虚,但不能轻易服输!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-14 14:52:32 | 显示全部楼层
串口的波特率计算基于系统时钟,
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-3-14 14:56:16 | 显示全部楼层
//内部晶振配置为8MHZ       
//stm3210x.h里的HSE_VALUE要改为 8000000

//内部晶振配置为64MHZ       
//stm3210x.h里的HSE_VALUE要改为 64000000

我配置的是64M的,stm3210x.h里面是这样修改的:

……
#if !defined  HSE_VALUE
#ifdef STM32F10X_CL   
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
  #define HSE_VALUE    ((uint32_t)64000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
……

注意,把HSE_STARTUP_TIMEOUT 这货调小点。这里我配置的是0x0100
#define HSE_STARTUP_TIMEOUT   ((uint16_t)0x0100) /*!< Time out for HSE start up */
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-3-14 14:58:46 | 显示全部楼层
当然你可能已经把startup_stm32f10x_md.s里的如下三条汇编给屏蔽了吧。(没屏蔽的话要屏蔽)
;     IMPORT  SystemInit
;                 LDR     R0, =SystemInit
;                 BLX     R0
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-3-14 15:00:50 | 显示全部楼层
配置成64M的函数如下:
void RCC_Configuration(void)
{
   RCC_DeInit(); /*&#189;&#171;íaéèRCC&#188;&#196;′&#230;&#198;÷&#214;&#216;éè&#206;aè±ê&#161;&#214;μ */
   RCC_HSICmd(ENABLE);
   while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//μè′yHSI&#190;íD÷
   RCC_HCLKConfig(RCC_SYSCLK_Div1);   /*éè&#214;&#195;AHBê±&#214;ó£¨HCLK£&#169; RCC_SYSCLK_Div1&#161;a&#161;aAHBê±&#214;ó = &#207;μí3ê±*/  
   RCC_PCLK2Config(RCC_HCLK_Div1);   /* éè&#214;&#195;&#184;&#223;&#203;ùAHBê±&#214;ó£¨PCLK2)RCC_HCLK_Div1&#161;a&#161;aAPB2ê±&#214;ó = HCLK*/     
   RCC_PCLK1Config(RCC_HCLK_Div2); /*éè&#214;&#195;μí&#203;ùAHBê±&#214;ó£¨PCLK1£&#169;RCC_HCLK_Div2&#161;a&#161;aAPB1ê±&#214;ó = HCLK / 2*/      
   FLASH_SetLatency(FLASH_Latency_2);   /*éè&#214;&#195;FLASH′&#230;′¢&#198;÷&#209;óê±ê±&#214;ó&#214;ü&#198;úêyFLASH_Latency_2  2&#209;óê±&#214;ü&#198;ú*/   
   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  /*&#209;&#161;&#212;&#241;FLASH&#212;¤è&#161;&#214;&#184;&#187;o′&#230;μ&#196;&#196;£,&#212;¤è&#161;&#214;&#184;&#187;o′&#230;ê1&#196;ü*/
   RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/*éè&#214;&#195LLê±&#214;ó&#212;′&#188;°±&#182;&#198;μ&#207;μêy£&#172;&#198;μ&#194;ê&#206;a8/2*16=64Mhz*/   
   RCC_PLLCmd(ENABLE);          /*ê1&#196;üPLL */
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*&#188;ì2é&#214;&#184;&#182;¨μ&#196;RCC±ê&#214;&#190;&#206;&#187;(PLL×&#188;±&#184;o&#195;±ê&#214;&#190;)éè&#214;&#195;ó&#235;·&#241;*/   
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  /*éè&#214;&#195;&#207;μí3ê±&#214;ó£¨SYSCLK£&#169; */  
   while(RCC_GetSYSCLKSource() != 0x08);     /*0x08£oPLL×÷&#206;a&#207;μí3ê±&#214;ó */               
}
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

36

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-4-22
在线时间
36 小时
 楼主| 发表于 2016-3-14 15:20:26 | 显示全部楼层
fanghuiopenedv 发表于 2016-3-14 15:00
配置成64M的函数如下:
void RCC_Configuration(void)
{

按照老兄的方法试了一下,还是不行,串口输出还是乱码
做技术的一定要谦虚,但不能轻易服输!
回复

使用道具 举报

36

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-4-22
在线时间
36 小时
 楼主| 发表于 2016-3-14 15:21:05 | 显示全部楼层
fanghuiopenedv 发表于 2016-3-14 15:00
配置成64M的函数如下:
void RCC_Configuration(void)
{

  RCC_Configuration();
        delay_init();                     //延时函数初始化          
        LED_Init();                          //初始化与LED连接的硬件接口
        uart_init(64,115200);
        while(1)
        {
                LED0=0;
                LED1=1;
                delay_ms(500);         //延时300ms
                LED0=1;
                LED1=0;
                delay_ms(500);        //延时300ms
                printf("串口调试实验\r\n");
        }
做技术的一定要谦虚,但不能轻易服输!
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-3-14 16:55:06 | 显示全部楼层

试试这个配置:
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);


        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //&#207;è&#213;&#188;ó&#197;&#207;è&#188;&#182;0&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //′óó&#197;&#207;è&#188;&#182;3&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±&#187;ê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);  //&#184;ù&#190;YNVIC_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèNVIC&#188;&#196;′&#230;&#198;÷
       
       
        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_Tx | USART_Mode_Rx ;       
        /* USART configuration */
        USART_Init(USART1,&USART_InitStructure);
       
        /*USART_ITConfig(USART1, USART_IT_TC, ENABLE);*/
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
        USART_Cmd(USART1, ENABLE);
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

13

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-12-12
在线时间
13 小时
发表于 2016-3-15 11:09:32 | 显示全部楼层
自己算算两个不同的系统时钟,实际与设置波特率的偏差,估计就能找到原因了
回复

使用道具 举报

18

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2017-9-20
在线时间
49 小时
发表于 2018-3-21 18:58:00 | 显示全部楼层
请问楼主的问题,最后怎么解决的?我现在改系统时钟为16M后,不知道串口时钟改如何修改?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-11-2
在线时间
3 小时
发表于 2022-6-27 22:16:54 | 显示全部楼层
楼主这个问题解决了么?怎么解决的?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2022-5-6
在线时间
4 小时
发表于 2022-7-18 15:30:32 | 显示全部楼层
fanghuiopenedv 发表于 2016-3-14 14:58
当然你可能已经把startup_stm32f10x_md.s里的如下三条汇编给屏蔽了吧。(没屏蔽的话要屏蔽)
;     IMPORT ...

请问为什么要屏蔽掉?这样系统时钟是哪个?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 15:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表