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

文章详细介绍了STM32中的SysTick系统滴答定时器的工作原理和相关寄存器,以及delay_init()和delay_us()函数的实现。此外,还涵盖了usart文件夹的内容,包括printf函数的使用和输出控制符,并提及了半主机模式在调试中的作用。
摘要由CSDN通过智能技术生成

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("字符串\r\n");

例子:

printf("Hello World!\r\n");

格式2:

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

例子:

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

格式3:

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

例子:

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

常用输出控制符表

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

常用转椅字符表

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

半主机模式简介

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值