找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3866|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

不同晶振配置STM32 波特率

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:89763 發(fā)表于 2015-9-10 01:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 一般來說,stm32都是用標(biāo)配的晶振,比如8MHz.但是,如果用別的晶振,比如13.56M的晶振,那串口接收還正常嗎?
  根據(jù)試驗結(jié)果,很可能會飛碼。比如說用串口助手發(fā)送的是0x35,但是在串口接收中斷里面就會得到別的值,即上位機(jī)發(fā)送的數(shù)據(jù)和板子接收的數(shù)據(jù)不一致。
  通過查資料,解決辦法如下:
  修改文件stm32f10x.h,
  把
  #define HSE_VALUE ((uint32_t)8000000)
  修改為:
  #define HSE_VALUE ((uint32_t)13560000)
  這樣,就正常了。
  另外,有的網(wǎng)友說還需要修改一個文件:system_stm32f10x.c,修改PLL參數(shù):
  將
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC |RCC_CFGR_PLLXTPRE |
  RCC_CFGR_PLLMULL));
  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE |RCC_CFGR_PLLMULL9);
  修改為:
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC |RCC_CFGR_PLLXTPRE |
  RCC_CFGR_PLLMULL));
  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE |RCC_CFGR_PLLMULL4);
  (因為我的SYSCLK是54.24M)
  再摘抄某網(wǎng)友的一段話,幫助理解:
  如果你仔細(xì)研究USART_Init()函數(shù),你會發(fā)現(xiàn),這個程序在配置波特率時會讀取RCC有關(guān)的寄存器來計算當(dāng)前CPU實際的工作頻率是多少,然后計算參數(shù)來實現(xiàn)你需要的波特率——就是說不管你把單片機(jī)設(shè)置為什么樣的工作頻率,這個函數(shù)都能讓串口以你要求的波特率工作。
  當(dāng)然如果你把原來8M的晶振換掉了,那你就需要修改系統(tǒng)中的一個定義:在文件stm32f10x.h中的定義HSE_Value,這參數(shù)定義了單片機(jī)使用外部晶振或時鐘源的頻率,一般就是8000000,即使用8MHz晶振。如果你的STM32用了什么7.3728、11.0592或者25MHz晶振時,你就要修改HSE_Value定義的值,這樣保證串口通信波特率正確。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表