您现在的位置是:首页 >技术杂谈 >【STM32】基础知识 第十一课 sys, delay & usart 文件夹网站首页技术杂谈

【STM32】基础知识 第十一课 sys, delay & usart 文件夹

我是小白呀 2024-06-10 12:00:02
简介【STM32】基础知识 第十一课 sys, delay & usart 文件夹

sys 文件介绍

函数分类相关函数功能
中断类函数sys_nvic_set_vector_table()设置中断向量表地址
中断类函数sys_intx_enable()开启所有中断
中断类函数sys_intx_disable()关闭所有中断 (但不是包括 fault 和 NMI 中断)
低功耗类函数sys_wfi_set()执行: WFI 指令进入低功耗状态)
低功耗类函数sys_standby()进入待机模式
低功耗类函数sys_soft_reset()系统软复位
设置栈顶地址函数sys_msr_msp()设置栈顶地址
系统时钟初始化函数sys_stm32_clock_init()设置系统时钟
Cache 配置函数 (F7/H7)sys_cache_enable()使能 I-Cache 和 D-Cache, 开启 D-Cache 强制透写

STM32 sys文件

delay 文件夹函数简介

函数分类相关函数功能
使用 OS
不使用 OSdelay_init()初始化系统滴答定时器
不使用 OSdelay_ms()用微秒延时函数实现毫秒延时

SysTick

SysTick 工作原理

SysTick, 即系统滴答定时器, 包含在 M3/4/7 内核里面, 核心是一个 24 位的递减计数器.

STM32 SysTick

SysTick 寄存器介绍

SysTick 控制及状态寄存器 (CTRL)

位段名称类型复位值描述
16COUTFLAGRO如果在上次读取本寄存器后, SysTick 已经数到了 0, 则该位为 1, 如果读取该位, 该位将自动清零
2CKSOURCER/W00=外部时钟源 (STCLK) 1=内核时钟 (FCLK)
1TICKINTR/W01=SysTick 倒数到 0 时产生 SysTick 异常请求 0=数到 0 时无动作
0ENABLER/W0SysTick 定时器的使能位

SysTick 重装载数值寄存器 (LOAD)

位段名称类型复位值描述
23:0RELOADR/W0当倒数至零时, 将被重装载的值

SysTick 当前数值寄存器 (VAL)

位段名称类型复位值描述
23:0CURRENTR/Wc0读取时返回当前倒计数的值, 写它则使之清零, 同时还会清除在 SysTick 控制及状态寄存器中的 COUNTFLAG 标志

delay_init() 函数

void delay_init(uint16_t sysclk)
{
	SysTick->CTRL = 0;
	HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);
	g_fac_us = sysclk/8;	
}

delay_us() 函数

void delay_us(uint32_t nus)
{
	uint32_t temp;
	SysTick->LOAD=nus * g_fac_us;  // 时间加载
	SysTick->VAL=0x00;   // 请口计数器
	SysTick-CTRL |= 1<<0;  // 开始倒数
	do
	{
		temp = SysTick->CTRL;
	} while((temp & 0x01) &&! (temp & (1<<16))); // CTRL.ENABLE 位必须位为 1, 并等待时间到达

	SysTick->CTRL&=~(1<<0);  // 关闭SYSTICK
	SysTick-.>VAL=0X00;  // 清空计数器
}

usart 文件夹介绍

  • printf 函数输出流程
  • printf 的使用
  • printf 函数支持

printf 的使用

格式1:

printf("字符串
");

例子:

printf("Hello World!
");

格式2:

printf("输出控制符", 输出参数);

例子:

uint32_t temp=10;
printf("%d
", temp);  // %d是输出控制符, temp是输出参数

格式3:

printf("输出控制符", 输出参数1, 输出参数2);

例子:

uint32_t temp=10;
printf("%d
", temp1, temp2); 

常用输出控制符表

控制符说明
%d按十进制整数数据的实际长度输出
%Id输出长整形数据
%mdm 为指定输出字符的宽度. 如果数据的位数小于 m, 则左端补以空格, 若大于 m, 则按实际位数输出
%c用来输出一个字符
%s用来输出字符串
%u输出无符号整数型 (unsigned)
%f输出实数, 包括单精度和双精度, 以小数形式输出
%x以十六进制形式输出整数

常用转椅字符表

控制符说明
回车, 将当前位置移到本行开头
换行, 将当前位置移到下一行
水平制表 (HT) (跳到下一个 TAB 位置)
\代表一个反斜字符
代表一个单引号字符
‘’代表一个双引号字符
?代表一个问号
空字符 (NUL)

半主机模式简介

用于 ARM 目标的一种机制, 可将来自应用程序代码的输入/输出请求传送运行调试器的主机. 简单来说是通过仿真器实现开发板在电脑上的输入和输出.

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。