精华内容
下载资源
问答
  • 一、新建工程 ①在固件库USER中创建新文件夹usart,再在其中新建usart.c和usart.h的文本 ...1.根据PPT,先配置时钟 1.1开启usart时钟 ①找到对应的APB2时钟函数 在FWLIB中找到rcc.c>rcc.h ,找到其中对应的APB2,复

    一、新建工程
    ①在固件库USER中创建新文件夹usart,再在其中新建usart.c和usart.h的文本
    ②把新建两个文件新添加到工程中,.c:双击工程文件USER,找到.c 然后打开.c后在其中添加头文件,.h文件在编译后会自动添加到.c下
    在这里插入图片描述
    在这里插入图片描述

    二、软件编程

    在usart.c中写串口函数
    void usart_init(void)
    {

    }
    1.根据PPT,先配置时钟
    1.1开启usart时钟
    ①找到对应的APB2时钟函数
    在FWLIB中找到rcc.c>rcc.h ,找到其中对应的APB2,复制到函数体中,
    在这里插入图片描述
    ②配置参数RCC_APB2PeriphClockCmd(参数1, 参数2);
    第一个参数
    然后我们要用到的是GPIOA,Go to这个函数定义 找到RCC_APB2Periph_GPIOA作为第一个参数
    在这里插入图片描述
    第二个参数
    在这里插入图片描述
    1.2开启引脚复用时钟
    复制第二个函数RCC_APB2PeriphClockCmd(参数1, 参数2);
    第一个参数
    在这里插入图片描述
    第二个参数:还是ENABLE
    1.3开启USART1时钟
    复制出第三个个函数RCC_APB2PeriphClockCmd(参数1, 参数2);
    第一个参数
    在这里插入图片描述
    第二个参数:还是ENABLE
    在这里插入图片描述

    至此第一步配置时钟完毕

    展开全文
  • 用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右(没记错的话)。那么这个50Mhz究竟代表了什么,我们今天详细探讨。 顺便的话就是测试一些...

    番外篇:STM32之GPIO口速率配置究竟代表什么

    用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右(没记错的话)。那么这个50Mhz究竟代表了什么,我们今天详细探讨。
    顺便的话就是测试一些常用硬件接口(硬件SPI为例)与软件模拟(软件SPI为例)的性能差别。(之前有老师说硬件spi和软件spi速度没什么区别,在此实践论证一下)。

    先论证的芯片是STM32F103C8T6
    首先是GPIO口配置,这里直接测试GPIOA的PA1:

    static void MX_GPIO_Init(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOD_CLK_ENABLE();
      __HAL_RCC_GPIOA_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
    
      /*Configure GPIO pins : PA0 PA1 PA2 */
      GPIO_InitStruct.Pin = GPIO_PIN_1;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出
      GPIO_InitStruct.Pull = GPIO_NOPULL;//无上拉
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//GPIO高速
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
    

    上述配置是用STM32CUBEMX配置的,只能配置GPIO速率为GPIO_SPEED_FREQ_HIGH,其实应该就是和库函数配置的50Mhz差不多。

    GPIO配置完成开始测试,先使用HAL库的GPIO操作代码:

      while (1)
      {
    		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
    		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
      }
    

    毫无疑问,这里会产生一个方波,这个方波的频率就是使用HAL库操作时GPIO的最大速率。但结果强差人意:
    在这里插入图片描述
    图里可以清晰看到,使用HAL库操作GPIO也就1.6M左右的速率,和50M相差甚远。查阅一番资料后发现HAL库为了可读性增加了大量冗余,因此HAL代码运行效率不如直接操作寄存器,直接操作寄存器或使用汇编语言会增加运行效率。
    下面搞起寄存器:
    修改主函数代码如下:

      while (1)
      {
    		GPIOA->ODR=1<<1;//PA1置1
    		GPIOA->ODR=0<<1;//PA1置0
      }
    

    这下在此用示波器观察波形:
    在这里插入图片描述

    可以发现,速率直接快了四五倍,到了8M左右,看来确实优化挺大,但还是和50M差距甚远。
    但其实自己也知道,STM32F103的通用IO口能做到这个地步也几乎是极限了,即使使用汇编提升效果也有限。
    但突然之前有老师说硬件spi和软件spi速度没什么区别,在此正好实践论证一下,看看硬件SPI的SCK引脚是输出频率最大能到多少。
    使用STM32CUBEMX配置硬件spi,因为使用的是STM32F103C8并且系统频率为72M,所以SPI的时钟频率最大只能设置为18M。STM32CUBEMX配置硬件spi的图如下:
    在这里插入图片描述
    主循环里面代码也很简单,不停用SPI传输就行了:

      while (1)
      {
    		HAL_SPI_Transmit(&hspi1,&test,1,1);
      }
    
    

    好啊,下面来看看硬件SPI性能怎么样,下面是SPI的SCK的示波器观察图片:
    在这里插入图片描述

    大概18M左右,这比只有8M左右的GPIO速率快的多的多。因此硬件SPI的上限速率无疑比软件模拟SPI快不少。但即使这样,大多数传感器类的SPI通信器件支持的SPI时钟也大多在10M以下,只有一些FLASH等芯片(如W25Q128)会支持20M以上的SPI时钟。所以一般情况下软件SPI确实够用,虽然软件SPI用DMA比较麻烦。
    再论证的芯片是STM32H743
    H743是个极品,我的测试结果居然表明它的性能和F103的性能相差没有我想象的那么大。(没有打开mpu和cache等辅助)

    先上时钟配置,时钟我直接拉到最大的480M。
    在这里插入图片描述
    然后就是配置GPIO,依旧是把PA1的性能拉满,代码如下:

    static void MX_GPIO_Init(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOH_CLK_ENABLE();
      __HAL_RCC_GPIOA_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
    
      /*Configure GPIO pin : PA1 */
      GPIO_InitStruct.Pin = GPIO_PIN_1;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    }
    
    

    这里速率是GPIO_SPEED_FREQ_VERY_HIGH,是所能配置的最快的了,应该50Mhz快不少,具体是多少没了解过,知道的可以评论区告诉我。
    先试试HAL库操作:

      while (1)
      {
    		
    		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
    		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
      }
    

    下面放实际的IO口波形图:
    在这里插入图片描述
    大概2.39MHZ,比F103快了几乎一倍不到,但就这???毕竟主频快了6倍左右,APB时钟也快了近3倍,结果IO速率就快一倍也有点强差人意,不知道是不是有什么错误如果大家发现可以指正。

    下面测试STM32H743直接寄存器操作IO口,代码依旧简单:

      while (1)
      {
    		GPIOA->ODR=1<<1;
    		GPIOA->ODR=0<<1;
    
      }
    

    在这里插入图片描述
    大概20M左右,比F103快了2倍多,也一般般。

    下面测试一下这个24M的硬件SPI的SCK,配置如下。在这里插入图片描述
    这个SPI时钟最高可以配置到96M,但是配置24M以上的波形几乎不能看,可能是手里H743板子设计有问题。
    依旧是简单的代码:

    while1{
    		
    	HAL_SPI_Transmit(&hspi1,&test,1,1);
    
      }
    

    看下波形吧:在这里插入图片描述
    就是24M,还挺准不错,就是波形比较差,可能是硬件设计问题。

    STM32F103C8和STM32H743都测试结束,结果强差人意。

    展开全文
  • I am trying to change the clock freq. to 400 kHz (fastmode) but I cant find the file.The problem is, thatread(file,buf,1) takes 0.3 msread(file,buf,count) count > 1 returns the same buf[i] for i &....

    I am trying to change the clock freq. to 400 kHz (fastmode) but I cant find the file.

    The problem is, that

    read(file,buf,1) takes 0.3 ms

    read(file,buf,count) count > 1 returns the same buf[i] for i < count. It's the buf[0] value I would get if I would use read(file,buf,1). I think that's caused by the sensor as it wants the first bit of SUB to be 1 what the kernel doesnt provide.

    The oszy. says, f = 88kHz, it shows 18 peaks for one "duration" and the delay between two "durations" is 0.2 to 0.3 ms

    It should be the same as mentioned here but I cant find the file where I have to put that in/I cant find the header that declares that type.

    Configure Linux I2C Speed

    Secondly I can't find any docs about read() and write(). I cant even find the headerfile that defines write() and read(). The only usefull doc I found is https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/i2c/dev-interface, but that doesn't make sure what read and write really does

    Board:

    radxa.com/Rock/specification

    (sry had to destroy link as I havent got 10 rep yet :/)

    running debian server:

    radxa.com/Rock/prebuilt_images

    imu:

    www.pololu.com/product/2468/resources

    Cheers :)

    解决方案

    I don't get why this question got two downvotes as it's not easy or answered somewhere else.

    Nevertheless I will answer my own question. I2c is compiled inside the kernel and it's not possible to use boot-param. to set the baudrate and there is no config file. You have to change the values in the src-code (for i2c-bus 0) and compile the kernel on your own.

    source on github: https://github.com/radxa/linux-rockchip/tree/radxa-stable-3.0/drivers/i2c/busses

    the files are named rk30 (that's what dmesg says)

    Cheers.

    展开全文
  • 参考TMS320C6678数据手册中的介绍,我分别介绍配置main PLL的几个关键寄存器分频系数:上述PLL控制器的若干输出频率是可编程的,此时钟分频系数由寄存器PLLDIV2,PLLDIV5,PLLDIV8配置。倍频系数: PLLM寄存器控制...

    参考TMS320C6678数据手册中的介绍,我分别介绍配置main PLL的几个关键寄存器

    分频系数:上述PLL控制器的若干输出频率是可编程的,此时钟分频系数由寄存器PLLDIV2,PLLDIV5,PLLDIV8配置。

    倍频系数: PLLM寄存器控制PLL控制器的倍频值。

    PLL控制寄存器(PLLCTL)和二级PLL控制器(SECCTL)复位后,PLLCTL中的PLL使能位PLLEN可被修改,但是对PLL的功能没有影响,除非先将PLLENSRC控制位清零;非使能PLLEN后PLL进入旁路模式,此时可以对PLL进行配置,配置结束后PLLEN置位,PLL按照配置后的模式工作;SECCTL中的OUTPUT DIVIDE位给出PLL的次分频系数(1或2)。  对于系统的MAIN PLL的详细配置流程,请参考TI官方的文档www.ti.com/lit/ug/sprugv2f/sprugv2f.pdf中的3.1:

    寄存器RSTYPE、RSTCTL及RSTCFG、RSISO给出了PLL复位控制逻辑配置单元。

    全面理解时钟系统,还需要与BOOT相关联。需要掌握C6678的BOOT相关的配置等等。也就是说,PLL的初始配置与BOOT相关。

    下表是从C6678的数据手册里面摘录下来的,便于理解前面说的那句话以及理解上面列出的PLLD和PLLM:

    PLL在BOOT模式下被置于PLL的状态下,PLL的初始参数是由BOOTMODE【12:10】决定。

    TMS320C6678 main PLL初始化配置在TI的Demo程序中main函数调用KeyStone_main_PLL_init (10, 1)函数里的参数配置过程。

    例程对应硬件的输入时钟CORECLK为100MHz;PLLM设置为10*2-1=20-1(PLLM寄存器,20倍频);PLLD设置为1-1(MAINPLLCTN0中的PLLD字段,1分频);OUTPUT  DIVIDE(SECCTN)设置为2-1(对应2分频),可以计算PLL输出时钟PLLOUT=CORECLK*(PLLM+1)/(PLLD+1)/(OUTPUT DIVIDE+) = 100MHz *20 / 1/2=1GHz。

    例程所对应的DSP CorePac主频(SYSCLK1)为1GHz;相应外设控制器时钟SYSCLK2~11是在此基础上的分频。

    上述寄存器设置参看TMS320C6678数据手册及用户手册.

    下面给大家讲解的是DDR3的时钟配置:

    DDR3 PLL为DDR3 存储控制器提供接口时钟;C6678上电复位后正常工作前需要为DDR3 PLL编程配置有效的时钟频率。DDR3 PLL的框图:

    该PLL输入时钟DDRCLK为外部输入差分时钟; 输出时钟PLLOUT驱动DDR3接口,控制DDR3的数据读写速率。

    DDR3 PLL配置不需要专用PLL 控制器,只需位于 BootCfg模块中的DDR3PLLCTN0和DDR3PLLCTN1,参考TMS320C6678数据手册7.7 DDR3PLL部分的说明。在对该寄存器写入配置前,需要先解锁(un-locking)KICK0/KICK1寄存器;同样修改配置寄存器后,需要锁定(locking)KICK0/KICK1寄存器。

    DDR3 PLL配置寄存器各参数描述参考TMS320C6678数据手册;寄存器与Main PLL配置寄存器PLLCTN和SECCTN相似。

    DDR3 PLL初始化流程如下:

    展开全文
  • 时钟配置 STM32的开发板提供了以下五种时钟源: HSI:高速内部时钟 HSE:高速外部时钟 LSI:低速内部时钟 LSE:低速外部时钟 PLL:锁相环倍频输出 内部时钟的通过RC振荡电路提供,如下图所示高速和低速内部时钟...
  • 经过system_stm32f10x.c文件中的SystemInit()函数之后,这里是指的默认时钟配置如下图所示: STM32F103的系统框架图如下所示: 可见:SPI1是在APB2上的,SPI2是在APB1上的。 SPI的波特率控制有8种分频可选 SPI控制...
  • STM32L051xx的时钟配置

    千次阅读 2019-03-17 13:29:20
    1、背景 最近,做移植,因此对目标平台做一些了解。...时钟配置是嵌入式程序中比较重要且基础的部分。 有四种不同的时钟源,可用于驱动系统时钟(SYSCLK)。 时钟源:HSI16、HSE、PLL、MSI AHB、APB1...
  • I2C 时序详解,精确到每一个时钟

    千次阅读 2020-12-24 17:27:34
    https://blog.csdn.net/dagefeijiqumeiguo/article/details/738643041 输入输出模式设置官方文档中有这样的介绍:SDA和SCL都是双向线路,都通过一个电流源或上拉电阻连接到...2C 总线上数据的传输速率在标准模式下可...
  • STM32 RCC-使用HSE/HSI配置时钟(以STM32MUX时钟树作为图例)
  • 动态重新配置端口(DRP)允许动态改变GTXE2_CHANNEL/GTHE2_CHANNEL和GTXE2_COMMON/GTHE2_COMMON原语的参数。
  • I2C有三种速率,如下: 普通模式(100kHz); 快速模式(400kHz); 高速模式(3.4MHz)。 I2C总线数据有效性 I2C总线进行数据传送时,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上...
  • I2C标准协议的时序时钟问题详解

    千次阅读 2020-12-24 17:27:37
    横向一格是25us,10个时钟周期大概用了4格,即4x25us=100us,平均每个时钟周期是10us,可算出传输频率为1/10us=100,000/s,即100k bps。 既有读又有写的波形图: I2C是由2根线进行操作的,一个是主控时序SCL,另一根...
  • 计算DSI数据速率的方式,以及如何配置时钟clk的方式 [KEYWORD]  dsi、data rate、mipi clk   [SOLUTION] 1、DSI vdo mode下的数据速率data_rate的大致计算公式为: Data rate= (Height+VSA+VBP+VFP)*...
  • SPI及其时钟配置

    万次阅读 2014-03-28 16:50:35
    今天知道了 SPI 时钟的设置 ,原来SPI 主设备 时钟极性的配置 应该和 从设备SDI的极性 相反。 怪不得以前做SPI 主设备程序的时候 ,把它设备设成mode 3(此时CPHA=1)就ok,设成mode 0(此时CPHA=0)就ng。因为...
  • 比如1066MT/S、1600MT/S、1866MT/S 等,这个是首要考虑的,因为这个决定了DDR3 内存的最高传输速率。 2、tRCD 参数 tRCD 全称是RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。DDR 的寻址流程是
  • RCC :reset clock control 复位和时钟控制器。特别是要着重理解时钟树,理解了时钟树,STM32 的一切时钟的来龙去脉都会了如指掌。 1、在STM32的启动文件中会调用调用固件库函数中的SystemInit(在文件system_stm32...
  • CC2530系统时钟概述 系统时钟源:32MHz的外部晶振或16MHz内部RC振荡器。 32MHz外部晶振的启动时间对一些应用程序来说可能比较长,所以设备可以运行在16MHz的内部RC振荡器。系统上电默认是16MHZ的内部RC振荡器。 RC振荡...
  • RCC 框图剖析—时钟部分2.1 系统时钟① HSE 高速外部时钟信号② PLL 时钟源 RCC : reset clock control 复位和时钟控制器。 1. RCC 主要作用——时钟部分 设置系统时钟 SYSCLK、设置 AHB 分频因子(决定 HCLK ...
  • 1.HSE:High_Speed_Extenal 外部高速时钟,焊接在芯片外部,精确度较高,是系统时钟的主要来源。 2.HSI :High_Speed_Inernal内部高速时钟,在芯片内部,精度不高。 3.LSE:Low_Speed_Extenal外部低速时钟,接频率...
  • 引言:从本文开始,我们陆续介绍Xilinx 7系列FPGA的时钟资源架构,熟练掌握时钟资源对于FPGA硬件设计工程师及软件设计工程师都非常重要。本章概述7系列FPGA时钟,比较了7系列FPGA时钟和前几代FPGA差异,总结7系列...
  • eMMC的总线速率(eMMC5.1)

    千次阅读 2021-01-23 12:50:27
    采用单数据速率模式,时钟频率最大52MHz,数据传输速率最大52MHz 高速DDR模式 采用双数据速率模式,时钟频率最大52MHz,数据传输速率最大104MHz HS200模式 SDR数据采样方法 时钟频率高达200 MHz,数据速率高达200 ...
  • 以vop时钟设置为例 //gpu/drm/rockchip/rockchip_drm_vop.c +2860 static void vop_crtc_enable(struct drm_crtc *crtc) clk_set_rate(vop->dclk, adjusted_mode->crtc_clock * 1000); clk_core_set_rate_...
  • 1、主要是这四个配置,第一个数据大小可以从芯片手册中的图看出一个Command Word是16位,所以这里选择16 Bits,作为数据大小。 2、可以从上图中看出MSB先行 3、时钟极性(CPOL):从上图可知片 时钟信号在片选...
  • MCBSP配置SPI

    千次阅读 2017-10-19 14:00:17
    1.28335硬件外设上只有一个SPI接口,所以当SPI接口不够用时,可以将McBSP配置为SPI接口。 McBSP:Multichannel Buffered Serial Port 引脚DX:引脚负责数据的发送 引脚DR::责数据的接收 引脚CLKX:发送时钟 引脚...
  • Xilinx 7系列FPGA的时钟结构

    千次阅读 2021-12-12 23:13:48
    本文源自Xilinx手册《UG472:7 Series FPGAs Clocking Resources》的第一章节,主要讲解了Xilinx7系列器件的时钟结构。
  • Linux spi驱动--时钟频率

    千次阅读 2015-11-26 16:42:43
    mark
  • 调用函数s3c2410_baseclk_add()注册外设时钟的过程和注册总线时钟的过程类似,也是将各个定义好的外设时钟如:structclkinit_clocks_off[]={{......},{.name="i2c",.id=-1,.parent=&clk_p,.enab...
  • 1、 通道模式配置(1X 2X or 4X) 相关寄存器: PLM Port(n) Path Control Register (PLM_SP(n)_PATH_CTL) 寄存器地址: 0x0291B0B0 该寄存器的PATH_MODE域负责配置1X,2X,4X模式。下图为不同mode的配置图: 使用...
  • 一、chrony时钟同步服务   chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘进行的手动输入进行同步。它还可以充当NTPv4(RFC 5905)服务器并...
  • 时钟系统就是CPU的脉搏,决定CPU速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻。 为什么 STM32 要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,519
精华内容 10,207
关键字:

时钟速率配置