STM32串口通讯以及温度收集搞定,其间首要遇到STM32系列单片机时钟树的问题,串口通讯遇到串口调试帮手能够接收到数据但呈现乱码现象,开端一向以为是串口装备和程序代码问题,因为是第一次上电在线调试STM32板子,后边首要查串口波特率装备和收发函数程序段,如下图:
波特率设置成115200没问题,试着下降波特率改成9600和4800但问题仍旧没有解决,紧接着如下处理:
将重定向函数注释,独自写串口发送字节和字符串函数,仍旧失利。最终确定到体系时钟装备上,因为手上的STM32开发板改用了12M的晶振,依据单片机时钟树的了解和解读,一般选用外部时钟HSE,体系时钟装备成72M,8*9=72,,12*6=72,关于 SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的装备一般是:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,PCLK1=HCLK/2= 36M。UART1挂载在APB2总线,而PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,
因此在system_stm32f10x.c文件中的setsysclockto72()函数中,(system_stm32f10x.c文件完成了 STM32的时钟装备,操作的是片上的 RCC这个外设统在上电之后,首选会履行由汇编编写的发动文件,发动文件中的复位函数中调用systemInit 函数就在这个文件里边界说。systemInit 函数默许调用setsysclockto72()装备体系时钟,体系的时钟就被初始化成 72M。)这样便将体系时钟装备成了72M,否则为12*9=108M。但测验运转依然接收到乱码。
持续找问题所在,检查 在stm32f10x.h里,有下面这段代码,
原因是库运用默许8MHz晶振,能够经过宏运用25MHz或12M晶振。详细界说在stm32f10x.h文件中,HSE_VALUE,一开端界说成了8000000,改成12000000搞定,串口通讯显现正常。