這兩天碰到關于CAN總線的問題,當檢查配置與CAN分析儀都沒問題的時候,陷入了迷茫期,之后在程序中找到對于CAN總線時鐘的理解,想到了APB1的時鐘可能有問題,對于在這里就對時鐘再一次的進行總結。
關于時鐘的文件主要有兩個:1.system_stm32f10x.c ,2.stm32f10x.h
1.首先在啟動文件中我們找到SystemInit()函數
我們可以看到關于時鐘的配置是在main函數之前的,接下來就看system_stm32f10x.c文件內:
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
/* Reset PLL2ON and PLL3ON bits */
RCC->CR &= (uint32_t)0xEBFFFFFF;
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x00FF0000;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
#endif
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}
然后我們回憶一下在STM32中外設主要用到的時鐘是APB1:
RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,
RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC,
RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB1ENR |= RCC_APB1Periph;
}
else
{
RCC->APB1ENR &= ~RCC_APB1Periph;
}
}
以及APB2:
RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,
RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB2ENR |= RCC_APB2Periph;
}
else
{
RCC->APB2ENR &= ~RCC_APB2Periph;
}
}
AHB:
@arg RCC_AHBPeriph_DMA1
@arg RCC_AHBPeriph_DMA2
@arg RCC_AHBPeriph_SRAM
@arg RCC_AHBPeriph_FLITF
@arg RCC_AHBPeriph_CRC
@arg RCC_AHBPeriph_OTG_FS
@arg RCC_AHBPeriph_ETH_MAC
@arg RCC_AHBPeriph_ETH_MAC_Tx
@arg RCC_AHBPeriph_ETH_MAC_Rx
@arg RCC_AHBPeriph_DMA1
@arg RCC_AHBPeriph_DMA2
@arg RCC_AHBPeriph_SRAM
@arg RCC_AHBPeriph_FLITF
@arg RCC_AHBPeriph_CRC
@arg RCC_AHBPeriph_FSMC
@arg RCC_AHBPeriph_SDIO
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->AHBENR |= RCC_AHBPeriph;
}
else
{
RCC->AHBENR &= ~RCC_AHBPeriph;
}
}
STM32F103主要就是這兩大時鐘,高速和低速,很明顯我們可以看到CAN1屬于APB1的低速時鐘,但是是多少呢?我們在每換一個板的時候都應該檢查一下。因為我們有一個不確定的外部時鐘。
2.接下來就看stm32f10x.h文件的了
關于外部時鐘配置的很重要的一個參數是HSE_VALUE了,所以外部時鐘晶振我們選用12M的
接下來我們就可以返回SystemInit()函數看看APB1的配置過程了:
1.找到SetSysClock()函數,跟著進入:SetSysClockTo72()函數。
之后我們就來到了這里,一個充滿期待的地方"#else"之后我們配置的外部晶振是12M要得到72M的PLL所以我們要給的倍頻系數是6而之前我給的是9所以當時的時鐘是錯的,但是程序還是能跑所以在當時沒檢查出來,所以通過這件事就可以看出,有時候不是問題有多難,而是你的方法有沒有效果,解決問題的能力就是這樣一步一步的成長起來的。
上一篇:關于STM32的裸機多任務多線程心得
下一篇:STM32外部中斷事件控制器EXTI概念及使用方法
推薦閱讀
史海拾趣
隨著科技的快速發展和市場需求的變化,CEI不斷調整自身的發展戰略和業務結構。公司加大了對新技術、新產品的研發投入,推動產業結構的升級和轉型。同時,CEI還積極探索新的商業模式和市場機會,為公司的可持續發展提供了有力保障。
DIALIGHT公司的故事始于1938年的紐約布魯克林,當時該公司專注于為飛機生產儀表板燈。隨著技術的不斷進步和市場的變化,公司在1971年,即LED推出僅一年后,推出了他們的第一個LED產品。這一舉措標志著DIALIGHT正式從傳統的飛機儀表板燈制造轉向LED照明技術的研發和應用。從此,DIALIGHT徹底改變了LED的用途,將其廣泛應用于世界各地的交通控制、指示燈、結構塔和工業場所,為全球提供了優質的照明解決方案。
Elpakco Inc公司深知,企業的成功離不開社會的支持和幫助。因此,公司始終將履行社會責任作為企業的重要使命。公司積極參與環保、公益等活動,努力減少生產過程中的環境污染和資源浪費。同時,公司還注重員工的成長和發展,為員工提供良好的工作環境和福利待遇,讓員工在為企業創造價值的同時,也能實現個人的成長和發展。
GREEGOO公司深知品牌建設對于企業發展的重要性。因此,公司投入大量資源用于品牌宣傳和推廣,通過贊助行業活動、舉辦產品發布會、開展公益活動等方式,不斷提升品牌知名度和美譽度。同時,GREEGOO還注重產品質量的提升和售后服務的完善,以優質的產品和服務贏得消費者的信任和忠誠。這些努力使得GREEGOO在電子行業中樹立了良好的品牌形象,品牌價值不斷提升。
為了滿足市場需求和擴大生產規模,千志電子不斷加大投資力度。2014年,千志電子在湖北投資建設了千志電子科技(湖北)有限公司項目,總投資額達到5000萬元人民幣。該項目占地面積50畝,主要生產電阻等電子產品。預計項目建成后可實現年產值4000萬元,年創利稅350萬元,安置勞動力120人左右。這一項目的投資建設不僅使千志電子的生產規模得到了進一步擴大,還為其未來的發展奠定了堅實基礎。
千志電子于1986年由董事長陳初志先生在臺灣創立,起初專注于生產各類型插件式電阻。隨著業務的不斷發展,公司意識到拓展更廣闊市場的重要性。1996年,千志電子進軍中國市場,在深圳設立了千志電子(深圳)有限公司,這一舉措標志著公司開始走向國際化。深圳作為中國改革開放的前沿陣地,為千志電子提供了豐富的資源和廣闊的市場空間,為其后續的發展奠定了堅實基礎。
1。調頻發射模塊FM1 19元一個 調頻發射模塊FM1的體積只有10X36X6毫米(其中高度僅指器件中的最高點),大小和小手指差不多,工作電壓為3~8伏,最佳工作電壓為6伏,對應的工作電流4~50毫安,發 ...… 查看全部問答∨ |
一個相當完整的畢業設計論文~~論文中的很多部分你肯定能用得著 智能型充電器的電源和顯示的設計,論文中的很多部分你肯定能用得著 朋友們下載后要回復呀,謝謝支持!! [ 本帖最后由 flynee 于 2008-6-11 13:46 編輯 ]… 查看全部問答∨ |
1、 應用Web和MATLAB的信號與系統基礎(第二版) 作者:(美)Edward Kamen, Bonnie Heck, Ed Kamen 2、CMOS 射頻集成電路設計(英文版) 作者:美Lee,T.H.著 3、MATLAB原理與工程應用 作者:(美)Edward B.Magrab ...… 查看全部問答∨ |
|
EBOOT運行時,老是在倒讀秒處死掉,然后怎么都沒反應了。請問什么原因,是不是硬件中斷出了問題? 如下所示: Press [ENTER] to download image stored on boot media, or [SPACE] to enter boot monitor. Initiating image download in 3 sec ...… 查看全部問答∨ |
|
好機會!赴加拿大軟件技術工程師4~10萬加元年薪 1、高級動畫特效編輯 2、嵌入式軟件設計 3、MIS軟件設計 4、2D與3D多媒體軟件應用 5、軟件產品開發 6、通信軟件設計 以上職位要求: 1、本科學歷或2年以上計算機專業學習證書 2、達到英語或 ...… 查看全部問答∨ |
|
結合繼電保護裝置對相住測試的需要, 介紹) ~ MS P 4 3 0 單片機產生多路可控制相位的正弦信號來模擬測試繼電保護裝置的實際動作。 該系統利用了MS P 4 3 0 單 片機的片內資源, 既簡化了系統設計, 又提高了系統的可靠性。 [ 本帖最后由 鑫 ...… 查看全部問答∨ |
求一塊stm32f103的開發板,最好是閑置的或者是二手的板子,希望有全套的開發工具,外設比較豐富,最好可以帶全板原理圖,木有錢啊,希望有的大俠幫助一下,或者推薦一款好的板子,謝謝啦,新手發帖。。。 qq:1147047562 tel:15986318652 [ 本帖最 ...… 查看全部問答∨ |