STM32学习(四)
创始人
2025-05-30 14:36:44
0

STM32CubeMX简介

STM32CubeMX是ST开发的一款图形配置工具,可通过配置自动生成初始化代码
在这里插入图片描述
一个图形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片

新建STM32CubeMX工程步骤
在这里插入图片描述

时钟树

在这里插入图片描述
在这里插入图片描述
H:high
L:low
S:speed
I:internal
E:external

在这里插入图片描述
在这里插入图片描述
PLL:需要通过锁相环倍频才能得到系统时钟的72MHz
IWDG:独立看门狗
RTC:实时时钟

STM32默认把外设时钟关闭

晶体:需要外部接晶振,成本要提高,稳定性更高,精准性更好,所以有外部时钟源一般选择外部时钟源。

所有定时器频率都是72MHz

配置系统时钟

在这里插入图片描述
我们要使用某个外设,必需先使能外设时钟
在这里插入图片描述

sys_stm32_clock_init函数

HAL_RCC_OscConfig()函数(F1)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)

typedef struct 
{ uint32_t  OscillatorType; 		/* 选择需要配置的振荡器 */ uint32_t  HSEState; 			/* HSE 状态 */ uint32_t  HSEPredivValue; 		/* HSE 预分频值 */ uint32_t  LSEState; 			/* LSE 状态 */ uint32_t  HSIState; 			/* HSI状态 */ uint32_t  HSICalibrationValue; 	/* HSI 校准值 */ uint32_t  LSIState; 			/* LSI 状态 */ RCC_PLLInitTypeDef  PLL; 		/* PLL 结构体 */ 
}RCC_OscInitTypeDef;
typedef struct 
{ uint32_t  PLLState; 		/* PLL 状态 */ uint32_t  PLLSource; 	/* PLL 时钟源 */ uint32_t  PLLMUL; 		/* PLL 倍频系数 */ 
}RCC_PLLInitTypeDef

HAL_RCC_ClockConfig函数(F1)
HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)

typedef struct 
{ uint32_t  ClockType; 		/* 要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2) */ uint32_t  SYSCLKSource; 		/* 系统时钟源 */ uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
}RCC_ClkInitTypeDef;
uint32_t FLatency #define  FLASH_LATENCY_0   0x00000000U 				/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_0 		/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_1 		/* FLASH 2个等待周期 */

F1系统时钟72MHz,Flash的时钟来源是系统时钟,但Flash最快允许24MHz,所以无法那么快直接访问
在这里插入图片描述
局部变量未定义初始值,则该值是随机的

SYSTEM文件夹介绍

sys文件夹介绍
在这里插入图片描述
所有函数以sys开头,因为\在sys.c文件夹下声明。

deley文件夹介绍

在这里插入图片描述
SysTick工作原理
SysTick,即系统滴答定时器,包含在M3/4/7内核里面,核心是一个24位的递减计数器(可以计16777216个数——0~16777215)。
在这里插入图片描述
SysTick控制及状态寄存器(CTRL)
在这里插入图片描述
SysTick重装载数值寄存器(LOAD)
在这里插入图片描述
SysTick当前数值寄存器(VAL)
在这里插入图片描述

void delay_init(uint16_t sysclk) //形参单位是M,如果是72MHz,则传入的参数是72
{ SysTick->CTRL = 0;  //避免前面的HAL_INIT()对设置产生干扰HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); //8分频g_fac_us = sysclk / 8; //1us要计数几次,9MHz频率下要数9次得到1us
}
void delay_us(uint32_t nus) 
{ uint32_t temp; SysTick->LOAD = nus * g_fac_us; 	/* 时间加载 */ SysTick->VAL = 0x00; 			/* 清空计数器 */ SysTick->CTRL |= 1 << 0 ; 		/* 开始倒数,使能滴答定时器,第1位ENABLE置1 */ do { temp = SysTick->CTRL; } while ((temp & 0x01) && !(temp & (1 << 16))); /* CTRL.ENABLE位必须为1, 并等待时间到达 */SysTick->CTRL &= ~(1 << 0) ; 		/* 关闭SYSTICK */ SysTick->VAL = 0X00; 			/* 清空计数器 */ 
}
void delay_ms(uint16_t nms) 
{ uint32_t repeat = nms / 1000;	/* 这里用1000,是考虑到可能有超频应用, * 比如128Mhz的时候, delay_us最大只能延时1048576us*/ uint32_t remain = nms % 1000; while (repeat) { delay_us(1000 * 1000); 	/* 利用delay_us 实现 1000ms 延时 */ repeat--; } if (remain) { delay_us(remain * 1000); 	/* 利用delay_us, 把尾数延时(remain ms)给做了 */ } 
}

ms延时函数是用微妙延时函数实现的,us延时函数在超频时最大能延时1s,所以当ms延时函数要延时超过1s时,要多次调用ms延时函数。

printf函数输出流程

在这里插入图片描述

printf函数支持

在这里插入图片描述
半主机模式简介
用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。
简单来说,就是通过仿真器实现开发板在电脑上的输入和输出。一般我们:不使用半主机模式!!!

微库法
在魔术棒->Target选项卡,勾选:Use Micro LIB,即可避免半主机模式
在这里插入图片描述
代码法
1个预处理、 2个定义、3个函数
1,#pragma import(__use_no_semihosting),确保不从C库中使用半主机函数
2,定义:__FILE结构体,避免HAL库某些情况下报错
3,定义: FILE __stdout,避免编译报错
4,实现:_ttywrch、_sys_exit和_sys_command_string等三个函数

AC5和AC6不使用半主机模式稍有差异,详见源码

微库法 VS 代码法
在这里插入图片描述
在这里插入图片描述

会导致乱码,fputc是一个一个字节发送

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...