初学者即将毕业实习,希望利用最后两个月的学习顺利找到工作,占个地方做些笔记O(∩_∩)O哈哈~

2019-07-20 23:27发布

本帖最后由 229382777@qq.com 于 2017-2-28 10:58 编辑

        买了原子的mini开发板快一年了,一直都是断断续续的学,学习进度经常被打断,导致现在连前面的知识也忘的差不多了,自身学习的条件可能没有大学生好,即将面临毕业实习,希望在最后这两个月能把mini教程全部过完并掌握,争取出去后能适应的了这方面的工作。在此借原子哥的宝地一用,也方便自己日后的复习,学习过程中可能会出现挺多错误的地方,也希望大家能帮忙指出其中错误的地方。为了保证自己的身体健康,不忙的情况下一般都会晚上9点前进行更新,每天会坚持去操场跑步。希望各位也注重身体健康,身体是革命的本钱O(∩_∩)O!

目录

所在页数 所在楼层楼层主题 1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
42#  
20#
25#
32#
38#
41#
44#
46#
54#
59#
60#
63#
71#
78#
85#
86#
100#
106#
110#
117#
122#
134#
144#
148#
152#
154#
155#
158#
163#
164#
167#
171#
173#
176#
185#
189#之后硬件篇
SYSTEM文件部分(一)
SYSTEM文件部分(二)
LED灯
按键
串口
外部中断
独立、窗口看门狗
定时器中断
PWM互补输出及死区时间
输入捕获
OLED
LCD
LCD(二)
RTC
待机唤醒
ADC
内部温度传感器
DAC
DMA
IIC
SPI
触摸屏
FLASH模拟EEPROM
内存管理
SD卡
FATFS
汉字显示实验
图片显示
IAP
触控USB鼠标实验
M3内核基础知识
UCOS任务调度
UCOS信号量和邮箱
消息队列、信号量、软件定时器
知识点分享
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
55条回答
it_do_just
1楼-- · 2019-07-24 19:13
 精彩回答 2  元偷偷看……
it_do_just
2楼-- · 2019-07-24 23:22
早上好………
it_do_just
3楼-- · 2019-07-25 00:20

SYSTEM文件部分(二)

中断管理函数

以下是几个概念

可屏蔽中断:

可屏蔽中断由有中断能力的外围设备所产生,包括处在定时模式的定时器溢出。每个可屏蔽中断源可以由中断使能位所单独关闭,或者由寄存器中的通用中断使能位GIE一齐关闭。


非屏蔽中断:

非屏蔽中断是出现在NMI线上的请求 ,不受中断标志位IF的影响,在当前指令执行完以后,CPU就响应。这种中断通常用于电源故障。非屏蔽中断的优先权高于屏蔽中断。


区别:

可屏蔽中断和不可屏蔽中断都属于外部中断,是由外部中断源引起的;但它们也有区别:可屏蔽中断是通过CPU的INTR引脚引入,当中断标志

IF=1时允许中断,当IF=0时禁止中断,不可屏蔽中断是由NMI引脚引入,不受IF标志的影响

 

过程:

简述:保存断点入栈,响应经中断控制器8259优先级判断后的中断请求,恢复断点。
I/O设备发出的所有中断(IRQ)都可以产生可屏蔽中断,受标志位IF的影响,根据中断循序标志的设置来判断CPU是否响应中断请求。
    1.接口发出中断请求
    2.当前指令执行完后,CPU响应中断
    3.终端类型号N送CPU
    4.当前的EFR CS HE EIP 推入栈
    5.清除IF(中断允许标志位,IF=0,禁止CPU响应外部中断请求,IF=1,允许响应)和TF(跟踪标志,也称单步执行,CPU按跟踪方式执行)
    6.由中断类型号,查中断向量表获得中断服务子程序的入口地址
    7.CPU执行中断子程序
    8.开中断
    9.IRET指令使EIP CS HE EFR弹出栈,返回被中断的源程序



中断挂起:

可以理解为“等待响应”



其中教程中有个ICER寄存器用于中断除能,这里要专门设置一个寄存器 ICER 来清除中断位,而不是向 ISER 写 0 来清除,是因为 NVIC 的这些寄存器都是写 1 有效的,写 0 是无效的。具体为什么这么设计,看下面这幅图


下图也是经常用到,放这里,免得总是去翻


原子哥代码中: void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)这个函数用来设置中断分组,

主要用于是对SCB->AIRCR=temp; 这条代码的操作,SCB->AIRCR是应用程序中断及复位控制寄存器,第8到第10位用于分组设置

 

NVIC_Init()进行了5步操作

1、设置分组

2、设置抢占优先级

3、设置响应优先级

4、设置通道

5、使能中断位

 

Ex_NVIC_Config()外部中断的配置

1、使能IO口复用时钟

2、设置中断寄存器组(总共4个组,每个组可以对应4个IO,总共可以对应16个IO(0~15)),以及使能的位

3、选择触发方式

4、开启中断

顺便看了下一些寄存器对应地址的方法,主要是分几步#define将各个基地址进行相加,在得到最后的地址后将地址强制转换为结构体指针类型,由于结构体的顺序结构可以将一段地址分配到对应的字节数里面,使用的时候直接用结构体指针指向就行了,非常方便,希望以后能学会使用这种方法写代码。

此论坛大神解释的事件与中断的区别:
事件:是表示检测到某一动作(电平边沿)触发事件发生了。
中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。
事件可以触发中断,也可以不触发
中断有可能被更优先的中断屏蔽,事件不会

事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒).
事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号

 

 

Usart.c

UART:通用异步收发器;
USART:通用同步异步收发器。一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯。

同步通信与异步通信区别:
1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2.同步通信效率高;异步通信效率较低。
3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4.同步通信可用于点对多点;异步通信只适用于点对点。



串口部分寄存器跟库函数版本还有差别,用库函数完全不用关心,只管直接设波特率就好了,我也不知道还有USART_BRR这个寄存器


以下是计算BRR寄存器值的公式,给了这条公式直接套就可以得出数值了



原子哥教程中也有提醒到在某些波特率和PCLK2频率下,还是会存在误差的,如下图


串口初始化过程:void uart_init(u32 pclk2, u32 bound)

1、先根据公式计算得出USARTDIV的小数和整数部分

2、使能PORTA口时钟

3、使能串口时钟

4、IO口状态设置

5、复位串口1

6、停止复位

7、波特率设置(有上面得出的值直接赋给BRR寄存器)

8、设置为1位停止,无校验位

9、如果使能了接收还需要使能串口中断,设置中断配置

 

 

STM32时钟系统

采用一个系统时钟不是很简单吗?为什么 STM32 要有多个时钟源呢? 因为首先
STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率,比
如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干
扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。

 

顺便记多一个图

龙之谷
4楼-- · 2019-07-25 02:17
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-07-25 03:03
回复【25楼】229382777@qq.com:
---------------------------------
 不错啊。。。。
it_do_just
6楼-- · 2019-07-25 05:45
 精彩回答 2  元偷偷看……

一周热门 更多>