来确保单片机的电源并不在有效工作电压范围之内时内部产生复位过程,使得单片机保持在正确的状态中,欠压复位有三个重要的参数:
1) VTR 是欠压复位功能恢复电压,大于该电压值的时单片机的欠压复位状态就结束了; 2)VTF 是欠压复位功能触发电压,小于该电压值的时单片机将保持欠压复位状态; 3) VHYS 是欠压复位的回差电压, VHYS=VTR - VTF;这个电压的主要目的是防止电源有噪声干扰的时候频繁的反弹,一般在 0.1~0.2V 之间。
如图所示,欠压复位是在电源电压达到 VTR 以后,内部的计数器才工作,因此在上电复位完成以后,欠压复位继续工作直至欠压复位完成既定的延迟后,整个单片机才会退出复位状态;因此内部引入欠压复位电路对于解决电源电压上升率过快和过慢的情况都有很大的帮助。需要注意的是低电压的复位电平阈值是和供电电压相关的,并且按照比例设定的无法更改,因此如果系统上不合则需要考虑外部的复位方法。 十四、BOOT设置(BOOT1,BOOT0):
1)(BOOT1=x,BOOT0=0):主FLASH区,即扇区,正常工作模式。
2)(BOOT1=0,BOOT0=1):系统存储器,芯片内部一块特定的区域,该区域出厂
时预置了一段Bootloader,即ISP程序,这部分已经被固化了,无人能改。这也是利用串口下载时的第一步:BOOT1=0,BOOT0=1。ISP下载模式。 3)(BOOT1=1,BOOT0=1):SRAM,芯片内置RAM,即内存。调试模式。
十五、关于串口:方向 以PC机为主
? RTS:请求发送,PC→→设备 ? CTS:清楚发送,设备→→PC ? DTR:数据终端准备好,设备→→ PC ? DSR:数据设备准备好,PC→→设备 ? DCD:载波检测
十六、关于一键下载原理:
CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,
我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340G IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。
十七、关于抢占优先级和响应优先级:
STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先
级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
(1)、抢占先式优先级(pre-emption priority)
高抢占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。
(2)、副优先级(subpriority)
在抢占先式优先级相同的情况下,高副优先级的中断优先被响应;
在抢占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)。 (3)、判断中断是否是被响应的依据
首先是占先式优先级,其次是副优先级; 占先式优先级决定是否会有中断嵌套;
(4)、优先级冲突的处理
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程
中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这个两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
十八、结构体成员变量地址对齐方式:(举例解释说明)
举个例子:
struct {
char a; //1byte int b; //4byte char c[2] //2byte double d; //8byte }Struct_A;
1、8位机里就按字节对齐,那么上述结构体共占用1+4+2+8=15byte。 2、在16位机里,变量就按照2字节对齐,比如a这个成员,虽然是个char类型,地址在0x80000000本身只占1字节,但是下一个成员b却不能使用0x80000001这个地址,而必须使用0x80000002,这就是按字长对齐。以上结构体占用的空间也就是2+4+2+8=16字节。 3、在32位机中,如果a在0x80000000的话,b只能放在0x80000004,因为这里的字长是4个字节。以上结构体占用空间4+4+4+8=20字节。
十九、关于STM32F4的RCC: 1、
Fpclk是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1,
以前说过,PCLK1是由系统时钟分频得来,最大36MHZ,PCLK2是直接由系统时钟得来,最大72MHZ。)
二十、关于STM32F4的串口: 1、
关于波特率的计算:
USART_BRR:波特率寄存器,其分为尾数部分DIV_Mantissa和小数部分DIV_fraction,在计算时,尾数部分直接化成二进制存入DIV_Mantissa,而小数部分则要乘以16再存入DIV_fraction。原理如同以下:
已知一个时间段是<1.1小时>,求相当于>小时>分钟。(再者到二进
制小数部分第四位得乘以16)
二十一、关于串口: 1、
当勾选发送新行后,串口调试助手在每次发送一段字符后会自动添加0x0d和
0x0a的换行符。
2、 串口发送数据丢失:
2-1、串口发送第一个字节数据丢失 TC:发送完成 ,当包含有数据的一帧发送完成后,由硬件将该位置位。如USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才荐这种清除程序。
0:发送还未完成; 1:发送完成。 注意到这一句:由软件序列清除该位(先读USART_SR,然后写入USART_DR)。 也就是说,要先read USART_SR,然后write USART_DR,才能完成TC状态位的清除。
而硬件复位后,串口发送的首个数据之前没有read SR的操作,是直接write DR,也就是说,TC没有被清除掉。 因此,
2-1、加了printf()函数后,串口发送字节数据有些丢失
3、printf()中,%d 是格式化为整型、%s 是格式化为字符串 、%lld 是格式化为长整
型。
4、x 表示按16进制输出数据,最小输出宽度为4个字符,右对齐,如果输出的数据小于4个字符,前补0,如:
printf(\输出0064 100的16进制数是64 5、sprintf()
int sprintf( char *buffer, const char *format, [ argument] … );
参数列表
buffer:char型指针,指向将要写入的字符串的缓冲区。 format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库STM32自学笔记(2)在线全文阅读。
相关推荐: