STM32F103和STM32F105在串口初始化的区别

发布者:温柔的心情最新更新时间:2018-08-12 来源: eefocus关键字:STM32F103  STM32F105  串口初始化 手机看文章 扫描二维码
随时随地手机看文章

问题描述:使用STM32F105RB芯片进行串口编程,宏定义为STM32F10X_HD,串口正常,能够收发数据,如果宏定义为STM32F10X_CL,则发送数据混乱,跟波特率不一致的现象很相似。STM32F105为互联型产品,应该进行STM32F10X_CL的宏定义。后续解决后会发上来。


解决方案:


1、原因,由于在谁stm32f10x.h中有这样一段话


#if !defined  HSE_VALUE

 #ifdef STM32F10X_CL   

  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */

 #else 

  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

 #endif /* STM32F10X_CL */

#endif /* HSE_VALUE */

这段话的含义是说,如果选择了CL型的芯片,也就是互联型芯片,则外部高速时钟默认为25M,而实际项目上我接的晶振是8M的这样问题就出线了

2、解决办法


1)在stm32f10x.h头文件中把HSE_VALUE值修改为你实际晶振的值,例如修改为8000000;


2)在system_stmf10x.c中


#ifdef STM32F10X_CL

    /* Configure PLLs ------------------------------------------------------*/

    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */

    /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */

        

    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |

                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);

    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL10|

                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);

  

    /* Enable PLL2 */

    RCC->CR |= RCC_CR_PLL2ON;

    /* Wait till PLL2 is ready */

    while((RCC->CR & RCC_CR_PLL2RDY) == 0)

    {

    }

    

   

    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ 

    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 

                            RCC_CFGR_PLLMULL9); 

把PLL2的时钟恢复为40M,否则PLL2相关的设备速度会下降很多的。


关键字:STM32F103  STM32F105  串口初始化 引用地址:STM32F103和STM32F105在串口初始化的区别

上一篇:STM32 IO口初始化流程
下一篇:STM32 USART串口初始化

推荐阅读最新更新时间:2024-03-16 16:10

C8051f300_UART0串口发送初始化
1、C8051f的UART0是异步、全双工串口。其波特率发生器规定由定时器1 定时器提供。可配置为8位UART或9位UART(多机通讯第九位用于片选作用)。SYSCLK=24.5MHZ(我的板子采用内部晶振频率作为系统时钟) BAUDRATE=115200(波特率) 2、初值TH1 Tl1配置 由上述公式可计算初值: TH1 = 256-(SYSCLK/BAUDRATE/2)而程序内是TH1 = -(SYSCLK/BAUDRATE/2),这两种是相同的。第一种是以正数的二进制形式保存在计算机内。第二种是负数,取反加1求得补码保存在计算机中。结果是相同的。每当TL1中的值溢出后 TH1存储的重装载值装载到TL1中开始计数。
[单片机]
C8051f300_UART0<font color='red'>串口</font>发送<font color='red'>初始化</font>
stm32F103大容量Flash的启动文件分析理解
启动文件详解: 启动文件的作用: 1.初始化堆栈指针 2.初始化PC指针 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界 详解: 给栈分配地址 Stack_Size EQU 0x00000400 ;1kb AREA STACK(名字), NOINIT(不初始化), READWRITE(可读可写), ALIGN=3(以3个字节对齐,表示) Stack_Mem SPACE Stack_Size __initial_sp EQU:宏定义的伪指令,代表#define AREA:告诉
[单片机]
基于STM32F103入门1——点亮LED灯
1:新建固件库工程文件 1.1找到一个固件库模板 1.2:打开KEIL5新建工程 最终效果: 1.3:添加相关文件 然后我们针对不同文件夹 我们添加不同的文件进来。 双击STARTUP 添加我们固件库的启动文件 STARTUP:添加Libraries—— CMSIS—— startup中的启动文件 USER:添加固件库的User文件夹中的.c文件 CMSIS 添加Libraries—— CMSIS文件夹中的.c文件 DOC:添加固件库中Doc文件夹的readme.txt FWLIB:添加Libraries—— STM32F10x_StdPeriph_Driver文件夹中的.c文件 添加完效
[单片机]
基于<font color='red'>STM32F103</font>入门1——点亮LED灯
stm32f103串口实现重映射功能
在实际开发中,经常遇到串口的默认输出IO口被其他模块占用了,所以我们要用到串口IO口映射功能,是指将原来实现功能的IO口映射到其他指定IO口,其他不变。具体操作如下: 先贴出默认下的串口初始化设置: void USART1Conf(u32 baudRate) { USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体 GPIO_InitTypeDef GPIO_InitStruct;//定义串口对应管脚的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);
[单片机]
stm32F103——ADC与DMA(按键与光敏电阻)
ADC的基本介绍 ADC的基本定义 Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 我们先来看ADC的工作原理: 通道选择:1个ADC模块具有多个通道,不同的通道在不同的引脚上。所以,我们要采集哪个引脚上面的模拟量,需要我们去选择对应ADC通道。 采保电容:采样保持电容。当开关闭合的时候,给采保电容进行充电,然后在规定的时间内断开开关,然后将采保电容上面的模拟量电压进行转换为数字量。这个就是ADC的采集原理。 采样时间:当开关闭合的时候,给采
[单片机]
<font color='red'>stm32F103</font>——ADC与DMA(按键与光敏电阻)
stm32f103 RTC周期性待机唤醒(一)
做一个低功耗的东西,搞了好几天,程序一直卡在一个地方(见下图),今天终于发现问题出在哪里了,对待机唤醒的问题做一个总结(只针对我遇到的问题,其他部分网上都有,基于stm32f103) 1、解决我遇到的问题 我的RTC初始化部分有个“保存在备份寄存器的RTC标志是否已经被配置过的判断”,如果已经配置过,则进入else部分,但是这个else部分没有“要使能电源时钟,使能备份时钟,取消后备区的写保护”这些配置语句,而待机唤醒后程序从主函数执行,会执行到else部分,因为没有那些配置语句,所以再次对闹钟赋值就会不成功,就会卡在那里。(那些配置语句在clock_ini函数里,有注释) 2、待机用不用加extiline17事件 如果把
[单片机]
<font color='red'>stm32f103</font> RTC周期性待机唤醒(一)
精英STM32F103开发板试用体验:+OLED屏显示功能的实现
鉴于STM32F103开发板没有配置显示屏,因此要显示一些信息除了借助串行通讯,就必须为其添加相应的显示器件了。在初步掌握GPIO口的基础上,最好是以OLED屏为显示器件。 OLED屏有多种类型,按色彩分有单色屏、双色屏及彩色屏;按接口方式分有并口屏、SPI接口屏及IIC接口屏。这里所选用的IIC接口的双色OLED屏,该显示屏在工作时只需占用2个GPIO口,所以该器件很有特色,图1是其显示效果。 图1OLED屏显示效果 在STM32F103开发板所配的光盘中,也有OLED屏显示例程但它是并口屏,并与OV7670摄像头共用同一接口,其接口的原理图如图2所示。 图2接口原理图 在IIC接口的使用方式中,我们只用到PC0和
[单片机]
精英<font color='red'>STM32F103</font>开发板试用体验:+OLED屏显示功能的实现
基于STM32F103RB的两相混合式步进电机细分驱动器设计
步进电机是一种运用广泛的控制电机,其特征是不使用位置反馈回路就能进行速度控制及定位控制,即所谓的电机开环控制。相对于伺服电机,步进电机有着成本低廉,控制简单等优点,尤其是两相混合式步进电机,在工业运动控制系统中有着广泛的应用。然而,传统的驱动方式,比如单电压驱动、高低电压驱动、斩波恒流驱动等等,虽然已经应用十分成熟,但是只限于低速运行,并且细分度一般限制在1/2步距,无法很好消除低频振荡,以及定位精度差等缺点。细分驱动的出现很好地弥补了这一缺点。 常见的细分控制器一般由MCU、专用逻辑驱动芯片以及功率驱动模块组成,这样的驱动器虽然能满足多细分驱动,但由于细分数量和效果会受到逻辑驱动芯片的影响,并且无法调整细分数和限流值、从
[单片机]
基于<font color='red'>STM32F103</font>RB的两相混合式步进电机细分驱动器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved