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

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

  • sys 文件介绍
  • delay 文件夹函数简介
  • SysTick
    • SysTick 工作原理
    • SysTick 寄存器介绍
  • delay_init() 函数
  • delay_us() 函数
  • usart 文件夹介绍
    • printf 的使用
    • 常用输出控制符表
    • 常用转椅字符表
  • 半主机模式简介

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 & usart 文件夹_第1张图片

delay 文件夹函数简介

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

SysTick

SysTick 工作原理

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

【STM32】基础知识 第十一课 sys, delay & usart 文件夹_第2张图片

SysTick 寄存器介绍

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

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

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

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

SysTick 当前数值寄存器 (VAL)

位段 名称 类型 复位值 描述
23:0 CURRENT R/Wc 0 读取时返回当前倒计数的值, 写它则使之清零, 同时还会清除在 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 输出长整形数据
%md m 为指定输出字符的宽度. 如果数据的位数小于 m, 则左端补以空格, 若大于 m, 则按实际位数输出
%c 用来输出一个字符
%s 用来输出字符串
%u 输出无符号整数型 (unsigned)
%f 输出实数, 包括单精度和双精度, 以小数形式输出
%x 以十六进制形式输出整数

常用转椅字符表

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

半主机模式简介

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

你可能感兴趣的:(stm32,单片机,嵌入式硬件)