你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32F103CBT6 配置成内部时钟然后串口的波特率不对了

[复制链接]
小肥羊dsf 提问时间:2017-12-19 09:28 /
我用内部RC作为内部时钟时候波特不对
焊接上晶振就对了
下面是时钟函数





  1. void RCC_Configuration(void)  
  2. {  
  3.         GPIO_InitTypeDef  GPIO_InitStructure;

  4.     RCC_DeInit();//将外设 RCC寄存器重设为缺省值  
  5.   
  6.     RCC_HSICmd(ENABLE);//使能HSI   
  7.     while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功  
  8.   

  9.     RCC_HCLKConfig(RCC_SYSCLK_Div1);     
  10.     RCC_PCLK1Config(RCC_HCLK_Div1);  
  11.     RCC_PCLK2Config(RCC_HCLK_Div1);  
  12.     //RCC_ADCCLKConfig(RCC_PCLK2_Div6);          
  13.     //设置 PLL 时钟源及倍频系数  
  14.     //经过测试这里最多设置成RCC_PLLMul_13高了就会死机


  15.         /*
  16.         These bits represent the ratio of the SYSCLK (system clock) period to the Flash access
  17.         time.
  18.         000 Zero wait state, if 0 < SYSCLK≤ 24 MHz
  19.         001 One wait state, if 24 MHz < SYSCLK ≤ 48 MHz
  20.         010 Two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
  21.         */
  22.        
  23.         /* Enable refetch Buffer */
  24.         //FLASH->ACR |= FLASH_ACR_PRFTBE;

  25.         /* Flash 2 wait state */
  26.         //FLASH->ACR &= (u32)((u32)~FLASH_ACR_LATENCY);
  27.         //FLASH->ACR |= (u32)FLASH_ACR_LATENCY_2;

  28.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  
  29.     FLASH_SetLatency(FLASH_Latency_2);  
  30.      

  31.     RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE   
  32.     RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能  
  33.     //等待指定的 RCC 标志位设置成功 等待PLL初始化成功  
  34.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
  35.   
  36.     //设置系统时钟(SYSCLK) 设置PLL为系统时钟源  
  37.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟   
  38.     //等待PLL成功用作于系统时钟的时钟源  
  39.     //  0x00:HSI 作为系统时钟   
  40.     //  0x04:HSE作为系统时钟   
  41.     //  0x08:PLL作为系统时钟   
  42.     while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL  

  43.     /*
  44.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  45.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  46.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  47.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  48.         RCC_MCOConfig(RCC_MCO_HSI);
  49.     */
  50. }
复制代码


收藏 评论7 发布时间:2017-12-19 09:28

举报

7个回答
小肥羊dsf 回答时间:2017-12-19 09:57:22
自己给自己顶一下
toofree 回答时间:2017-12-19 10:59:30
你这属于不按套路出牌风格呀,
看一下串口波特率怎么定的,里面调用了系统时钟的宏定义参数。

你这是哪个版本的库

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

小肥羊dsf 回答时间:2017-12-19 11:11:33
toofree 发表于 2017-12-19 10:59
你这属于不按套路出牌风格呀,
看一下串口波特率怎么定的,里面调用了系统时钟的宏定义参数。

串口的配置

  1. //初始化IO 串口1
  2. //bound:波特率
  3. void uart_init(u32 bound){
  4.     //GPIO端口设置
  5.     GPIO_InitTypeDef GPIO_InitStructure;
  6.         USART_InitTypeDef USART_InitStructure;
  7.         NVIC_InitTypeDef NVIC_InitStructure;
  8.          
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);        //使能USART2,GPIOA时钟
  10.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);         
  11.         USART_DeInit(USART2);
  12.          //USART2_TX   PA.2
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
  14.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  16.     GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
  17.    
  18.     //USART2_RX          PA.3
  19.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  20.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  21.     GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA3

  22.    //Usart2 NVIC 配置

  23.     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  24.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
  25.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
  26.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  27.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
  28.   
  29.    //USART 初始化设置

  30.          USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
  31.          USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  32.          USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  33.          USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
  34.          USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  35.          USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx ;        //收发模式
  36.          //

  37.     USART_Init(USART2, &USART_InitStructure); //初始化串口
  38.     USART_ITConfig(USART2, USART_IT_TC, ENABLE);//开启中断
  39.     USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
  40.     USART_Cmd(USART2, ENABLE);                    //使能串口

  41. }
复制代码

我用的是3.5的库
toofree 回答时间:2017-12-19 12:01:40
看一下,USART_Init()里面是什么?
用到了RCC_ClocksStatus.PCLK2_Frequency,RCC_ClocksStatus.PCLK1_Frequency,这是跟系统时钟有关系的。请参考文件“Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c”
toofree 回答时间:2017-12-19 12:03:20
默认是外部时钟,你要改成内部的,system_stm32f10x.c文件得修改,用内部时钟时系统时钟最快64M。
小肥羊dsf 回答时间:2017-12-20 11:03:35
那一条函数不是修改了吗void RCC_Configuration(void)  
小肥羊dsf 回答时间:2017-12-20 18:33:14
但是还是不对啊

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版