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

2023-05-06 10:35:30

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

更多推荐

Android面试题汇总(二)

一、Java集合1、谈谈Java中List、Set以及Map的区别?List:有序的,数据可以重复。。Set:无序的,数据不能重复。Map:键值对存储。键是唯一的,值不是唯一的。2、谈谈ArrayList和LinkedList的区别?ArrayList:底层是基于数组的,数组占用的是一个连续的内存空间。在新增和删除的时

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,…,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。可以是暴力解法也可以是滑动窗口。可以降低复杂度。classSolut

04JVM_语法糖

一、编译期处理语法糖java编译器把*.java源码编译为*.class字节码的过程中,自动生成和转换的一些代码(添加的class字节码),减轻程序员的负担。1.默认构造器默认构造器没有写任何的构造方法,但经过编译器编译成字节码过程中,会加上调用父类Object的无参构造方法。调用java/lang/Object.”<

浅谈一下前端字符编码

背景众所周知,计算机只能识别二进制,它是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用二进制数的0和1表示。但是现实中存在着其他的字符:数字、字母、中文、特殊符号等。因此就需要将这些字符转化成计算器可以识别的二进制编码。而我们在开发过程中,也常常会遇到各种各样的编码,例如ACSII、u

ChatGPT的未来

随着人工智能的快速发展,ChatGPT作为一种自然语言生成模型,在各个领域都展现出了巨大的潜力。它不仅可以用于日常对话、创意助手和知识查询,还可以应用于教育、医疗、商业等各个领域,为人们带来更多便利和创新。在教育领域,ChatGPT可以成为学生的学习伙伴和辅导员。学生可以通过与ChatGPT的对话,提出问题、寻求解答和

Vue系列(二)之 基础语法【上篇】

目录一.插值1.1文本1.2原始HTML1.3属性1.4表达式二.指令2.1v-if/v-else-if/v-else指令2.2v-show指令2.3v-for指令2.4下拉框/复选框2.5动态参数三.过滤器3.1局部过滤器基本应用3.2局部过滤器串行使用3.3局部过滤器传参3.4全局过滤器四.计算属性和监听属性4.1

【Nginx系列】(一)Nginx基础概念

❝有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top❞首发博客地址文章更新计划系列文章地址Nginx的三个主要应用场景静态资源服务通过本地文件系统提供服务静态资源服务是指通过本地文件系统提供静态文件(如HTML、CSS、JavaScript、图片等

【云原生系列】云计算概念与架构设计介绍

1什么是云计算云计算是一种基于互联网的计算模式,在这个模式下,各种计算资源(例如计算机、存储设备、网络设备、应用程序等)可以通过互联网实现共享和交付。云计算架构设计的主要目标是实现高效、可扩展、可靠、安全和经济的计算资源共享。2云计算架构介绍在云计算架构中,通常会采用分层的设计思路,将计算资源划分为不同的层次,每个层次

transformer系列1---Attention Is All You Need全文详细翻译

论文链接:AttentionIsAllYouNeed.代码链接:Transformer.Transformer0Abstract摘要1Introduction引言2background背景3ModelArchitecture模型架构3.2Attention注意力3.2.1ScaledDot-ProductAttenti

【Java 基础篇】Java对象反序列化流详解

在Java编程中,对象序列化和反序列化是常见的操作,用于将对象转换为字节流以便于存储或传输,并从字节流中重新构建对象。本文将重点介绍对象反序列化流的用法和相关概念,帮助基础小白理解这一重要的主题。什么是对象反序列化?对象反序列化是将之前序列化的对象字节流还原为对象的过程。这个过程是序列化的逆过程,它可以让我们重新获得原

Vue3路由

文章目录Vue3路由1.载入vue-router库2.实例2.1Vue.js+vue-router实现单页应用2.2router-link创建链接2.3router-view显示与url对应组件2.4`<router-link>`相关属性Vue3路由1.载入vue-router库Vue.js路由需要载入vue-rout

热文推荐