您现在的位置是:首页 >技术杂谈 >【STM32】基础知识 第十一课 sys, delay & usart 文件夹网站首页技术杂谈
【STM32】基础知识 第十一课 sys, delay & usart 文件夹
简介【STM32】基础知识 第十一课 sys, delay & usart 文件夹
【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 强制透写 |
delay 文件夹函数简介
函数分类 | 相关函数 | 功能 |
---|---|---|
使用 OS | … | … |
不使用 OS | delay_init() | 初始化系统滴答定时器 |
不使用 OS | delay_ms() | 用微秒延时函数实现毫秒延时 |
SysTick
SysTick 工作原理
SysTick, 即系统滴答定时器, 包含在 M3/4/7 内核里面, 核心是一个 24 位的递减计数器.
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("字符串
");
例子:
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 | 输出长整形数据 |
%md | m 为指定输出字符的宽度. 如果数据的位数小于 m, 则左端补以空格, 若大于 m, 则按实际位数输出 |
%c | 用来输出一个字符 |
%s | 用来输出字符串 |
%u | 输出无符号整数型 (unsigned) |
%f | 输出实数, 包括单精度和双精度, 以小数形式输出 |
%x | 以十六进制形式输出整数 |
常用转椅字符表
控制符 | 说明 |
---|---|
回车, 将当前位置移到本行开头 | |
换行, 将当前位置移到下一行 | |
水平制表 (HT) (跳到下一个 TAB 位置) | |
\ | 代表一个反斜字符 |
’ | 代表一个单引号字符 |
‘’ | 代表一个双引号字符 |
? | 代表一个问号 |