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

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
自己给自己顶一下
七哥 回答时间: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的库
七哥 回答时间: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”
七哥 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版