STM32F0库应用技术笔记——iar工程建立&时钟管理

基于Coocox CoIDE的STM32F0开发:从环境搭建到工程模板创建 嵌入式开发中,集成开发环境(IDE)是连接开发者与微控制器的重要桥梁,它通过集成编译器、调试器和项目管理工具,极大提升了开发效率。对于ARM Cortex-M0内核的微控制器,如STM32F0系列,选择合适的IDE能简化底层配置,让开发者更专注于应用逻辑。Coocox CoIDE作为一款基于Eclipse的免费工具,以其独特的组件管理器著称,允许开发者以图形化方式添加和管理外设驱动,显著降低了外设初始化的复杂度。这种可视化配置方式特别适合快速原型验证和初学者入门,能有效管理启动文件、系统时钟等基础配置。在嵌 阅读详情

开发环境

我目前是在如下开发环境下操作的,
软件

  • iar for arm开发工具
  • STM32F0xx_StdPeriph_Lib_V1.5.0库

硬件

  • STM32F030F4P6最小系统板
  • ST Link V2调试工具
  • TTL转USB串口工具

创建iar for arm工程

拷贝库文件到工程

把STM32F0xx_StdPeriph_Lib_V1.5.0库中Libraries放到工程目录中。同时拷贝库中Projects\STM32F0xx_StdPeriph_Templates路径下以下三个文件到工程目录中

stm32f0xx_conf.h
stm32f0xx_it.c
stm32f0xx_it.h
system_stm32f0xx.c

工程options...配置

C++ Compiler -> Preprocessor -> Additional include directiries:(one per line)配置如下,要注意的是CMSIS库头文件搜索路径设置为iar安装路径中最新的头文件,这是因为 iar 版本升级后,使用STM32F0xx_StdPeriph_Lib_V1.5.0中CMSIS老的库头文件编译会出错。

$PROJ_DIR$\
$TOOLKIT_DIR$\CMSIS\Include
$PROJ_DIR$\..\..\Libraries\CMSIS\Device\ST\STM32F0xx\Include
$PROJ_DIR$\..\..\Libraries\STM32F0xx_StdPeriph_Driver\inc

C++ Compiler -> Preprocessor -> Defined symbols:(one per line)添加如下宏定义

USE_STDPERIPH_DRIVER
STM32F030

Debugger -> Setup -> Driver中,选择ST-LINK,
Debugger -> Setup -> Download中,复选框,选中Verify download以及Use flash loader(s)

组织工程文件

在工程中添加system_stm32f0xx.c,startup_stm32f030.s文件,在main.c文件中,添加#include "stm32f0xx_conf.h",如下图所示,
这里写图片描述

工程创建完毕。
工程中如果需要使用某个驱动库,直接添加进图示STM32F0xx_StdPeriph_Driver组中,
如果需要使用到中断添加stm32f0xx_it.c到工程中即可。

接下来才正式进入主题。这里会从时钟管理,接口技术一步步建立库使用例程。在实际开发中,只需要拷贝+修改就可以快速完成功能模块开发。

STM32F0——时钟管理

概述

这一部分主要是配置系统时钟(CPU主频)及各总线时钟,包括了AHB,APB,IIC,USART,RTC等。在工程组织文件system_stm32f0xx.c中提供了1个变量3个函数,如下所示

SystemCoreClock变量为系统时钟(CPU主频),单位Hz
void SystemInit(void)函数
static void SetSysClock(void)函数
void SystemCoreClockUpdate(void)函数

在启动文件startup_stm32f030.s中,程序在进入main函数之前调用SystemInit(void)函数,对时钟进行配置,SystemInit(void)函数首先复位各时钟寄存器,然后调用SetSysClock(void)函数对时钟进行配置。

而在用户app中,如果重新初始化配置了系统时钟,配置完成后,可以运行一次SystemCoreClockUpdate(void)函数,它会更新SystemCoreClock变量,用户可以获取该变量的值确定当前系统时钟。毕竟,该值是有用的,可以依据此配置sys定时器,通信接口速率等。

代码实操

时钟配置代码只需在SetSysClock(void)函数修改即可定制以适应各种需求。见STM32F0寄存器配置参考文件90页clock配置图。芯片默认CPU主频(SYSCLK)时钟源为HSI(高速内部时钟8MHz),本例中,外部时钟(HSE)晶振8MHz,

  • 配置HCLK,PCLK=CPU主频
  • 配置PLL输入,选择外部时钟HSE(分频为1)作为PLL时钟源,8MHz
  • 配置PLL输出,6倍频,PLL输出48MHz
  • 配置CPU主频时钟源为PLL时钟:48MHz
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
  /* Enable HSE */    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);

  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)//HSERDY: HSE 时钟就绪标志    1: HSE 振荡器就绪
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }  

  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer and set Flash Latency */
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;//位 7:4 HPRE: HCLK 预分频(HCLK prescaler)

    /* PCLK = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;//位 10:8 PPRE: PCLK 预分频(PCLK prescaler)

    /* PLL configuration = HSE * 6 = 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    //位 16 PLLSRC: PLL 输入时钟源   1:HSE/PREDIV 作为PLL 输入时钟
    //位 17 PLLXTPRE: HSE 分频器作为PLL 输入   0: HSE 不分频
    //位 21:18 PLLMUL: PLL 倍频系数    0100: PLL 输入时钟的6 倍频
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);

    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }

    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */
  }  
}
告别模拟IIC!用STM32CubeMX和HAL库快速驱动CH455G数码管模块(STM32F0系列通用教程) 本文详细介绍了如何利用STM32CubeMX和HAL库快速驱动CH455G数码管模块,特别针对STM32F0系列单片机进行优化。通过硬件I2C接口实现高效控制,仅需两根线即可驱动多位数码管,显著简化硬件设计。教程包含完整的配置步骤、核心驱动代码实现及常见问题解决方案,帮助开发者快速掌握CH455G数码管驱动技术。 阅读详情

相关推荐

STM32F0 PWM输出与互补输出的高级配置实战

STM32F0系列微控制器是由STMicroelectronics公司推出的一系列基于ARM Cortex-M0处理器的低成本、高性能微控制器。它集合了多种外设、存储器和通信接口,并且具有出色的能效和扩展性,适合于各种应用,特别是成本和功耗敏感的场合。PWM(脉冲宽度调制)是一种对模拟信号电平进行数字编码的方法,通过调整脉冲的宽度来控制电力输出。在PWM信号中,信息编码在一系列脉冲的宽度上,而不是在脉冲的高度上。

weixin_35307279的博客 996

STM32F0xx_StdPeriph_Lib_V1.5.0.zip_STM32F030_STM32F030 UART_STM

stm32f030标准库文件,包含全部外设,定时器,pwm,uart,adc,mda等等

STM32F0xx微控制器程序开发模板

STM32F0xx系列微控制器是基于高性能的ARM® Cortex®-M0处理器,旨在为预算有限的应用提供一种高成本效益的解决方案,同时提供良好的性能。它们是32位的MCU,广泛用于工业控制、消费类电子产品、医疗设备和汽车应用等领域。ARM Cortex-M0内核是ARM公司推出的一款32位RISC处理器,专为低成本、低功耗和简单应用而设计。STM32F05xx系列微控制器采用了这款内核,使其成为入门级微控制器市场的有力竞争者。

weixin_42601702的博客 733

STM32F0xx_USART收发配置详细过程

推荐 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:https://www.strongerhuang.com 我的知乎:https://www.zhihu.com/people/strongerHuang.com 前言 串口...

strongerHuang 2万+

基于STM32的电子时钟项目设计

STM32微控制器是ST公司生产的一系列基于ARM Cortex-M内核的32位微控制器。这些微控制器广泛应用于嵌入式系统,因其高性能、低功耗、高集成度以及丰富的外设接口而受到开发者的青睐。STM32系列覆盖了从简单的低成本产品到高性能应用的各种需求,成为工业控制、消费电子、医疗设备等领域的首选微控制器之一。ARM Cortex-M系列微控制器(MCU)是专为嵌入式应用设计的,以实现高性能、低功耗以及系统集成。Cortex-M架构具有多种核心特性,其中包括:确定性与实时性。

weixin_42588877的博客 1176

STM32CubeMX工程配置与Keil MDK模板实战

STM32CubeMX是由STMicroelectronics推出的一款图形化配置工具,专为STM32系列微控制器设计。它不仅简化了芯片初始化流程,还通过生成标准化的C代码模板,显著提升了嵌入式开发效率。其核心价值在于提供可视化的时钟树配置、外设管理与工程模板生成功能,使得开发者能够快速搭建项目框架,降低开发门槛和维护成本。

weixin_35756624的博客 729

STM32F0xx_TIM基本延时配置详细过程

推荐 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 前言 关于定时器大家都应该不会陌生,因为处理器都有这个功能。今天总结的F0系列芯片的定时器根据芯片型号不同,数量也不同。定时器分类:基本定时器、通用定时器和高级定时器。计数位数也有不同,有16位的,有...

strongerHuang 1万+

STM32F0xx_StdPeriph_Lib_V1.5.0固件库+带例程

最新STM32F0xx系列固件库 V1.5.0 带全部外设的官方例程

lite-os + STM32F091 + IAR 工程模板

前言 liteos官方, 书上,网上能找到的模板工程大部分都是STM32F103, STM32F407的lite-os例子. 这次,我想在STM32F091上用用lit-os. 环境 : lite-os在git上的旧版, IAR8.40.2, HAL库,JLINK, STM32F091 移植完成后,可以进入建立的任务,可以执行延时函数。说明lite-os的任务调度好使。 是否能用HAL库正确的操作STM32F091, 后续再验证。 移植完的工程模板(IAR) 稍候上传 试验 先要找到lite-os用于MCU

博客标题不能为空 861

STM32F0xx_StdPeriph_Lib_V1.5.0.rar

最新STM32F0xx_StdPeriph_Lib_V1.5.0,适合新手学习参考

STM32F0系列参考例程

该例程不是官方开发板的例程,而是我买的开发板赠送的。包括了IO口,SPI,DMA,USART等。基本上每个模块都有了。学习STM32的同学拿去。该开发板为STM32F051,凡是STM32F0xx系列的都行。

stm32F0例程

stm32f0系列官方历程,包括F0系列所以MCU,以及各种模块例程

STM32F0xx_StdPeriph_Lib_V1.5.0.zip

STM32F0xx_StdPeriph_Lib_V1.5.0 用于编写STM32F0系列单片机代码的STM32F0的固件库

STM32固件开发:IAR使用教程图解说明

详细介绍STM32固件开发中IAR集成环境的配置与操作步骤,结合图文帮助开发者快速掌握iar使用教程的核心要点,提升嵌入式开发效率。

weixin_35982453的博客 556

STM32F0开发例程.rar

STM32F0的开发例程

STM32F0开发例程

里面包含比较全的STM32F0XX系列单片机的例程,基本可以直接用。该资料只用于实验、共享,不可用于盈利,如若产生经济纠纷,不负任何责任。

STM32学习笔记

STM32系列微控制器基于:适用于低功耗、低成本应用(如STM32F0、L0系列)Cortex-M3:通用高性能内核(如STM32F1、F2系列)Cortex-M4:带浮点运算单元(FPU)和DSP指令集,适合信号处理(如STM32F4、G4系列)Cortex-M7:高主频、多级流水线,用于高性能计算场景(如STM32H7系列)这些内核均采用Thumb-2指令集,兼顾代码密度与执行效率,在保证性能的同时降低功耗。

gaoxiang_120的专栏 1100

openEuler在虚拟机的网络配置

ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。

FHY1221的博客 2933
下一篇: NRF5 SDK蓝牙开发——NRF_LOG_INFO(...)通过串口输出的实现
wayne2018
博客等级 码龄14年 175粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wayne2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值