这几天被这个问题搞疯了 用ST的库做串口使用智林的板子,智林的板子上的晶振是12M的,这两个地方已修改 1:#define HSE_Value ((u32)12000000) (原来是8000000) 2:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); 其中第二点我觉得是无所谓的,只要不超过72M。发现这条语句USART_InitStructure.USART_BaudRate = ???;所实际对应的波特率恰好为???*1.5,跟12M与8M的比例相同。几天的摸索中发现#define HSE_Value ((u32)12000000)这条语句改成多少都无所谓即使注释掉一样可以照常运行。搜索源码发现HSE_Value只用在了stm32f10x_rcc.c中的void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)这一个函数里面。并且这个函数也只是返回一些已经设定好的时钟值,并没有进行设置新的东西。我严重怀疑ST的库已经按照8M做死了,强烈关注这个问题! 串口的设置我发现了这个规律,那么别的跟时钟有关的如果都有这个问题可就麻烦了,希望技术支持关注一下这个问题! 还好ST公开了库源码,发现果然还有一个地方,在stm32f10x_rcc.c中#define HSI_Value ((u32)8000000),定义死了为8M,修改成12M,发现只生成了一个debug的库版本(STM32F10xD.LIB)而没有生成release版本的库文件(STM32F10xR.LIB),而这个debug版本的库文件不能直接使用,求助:两个版本的库文件有什么区别?怎么设置才能生成release版本的库文件?或者怎么设置才能使用这个debug版本的库文件? 使用MDK3.40 |