您的位置:首页 > 其它

stm32f1-杂散类笔记

2018-04-10 14:05 106 查看

1.位带操作

把1bit扩展到32bit,实现位操作

//SRAM 位带区:    0X2000 0000~0X2010 0000
//SRAM 位带别名区:0X2200 0000~0X23FF FFFF

//外设 位带区:    0X4000 0000~0X4010 0000
//外设 位带别名区:0X4200 0000~0X43FF FFFF

// 把“位带地址+位序号”转换成别名地址的宏 , <<5  等于*8*4, <<2 等于*4

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<<5)+(bitnum<<2))
// 把一个地址转换成一个指针
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
// 把位带别名区地址转换成指针

#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 

2.启动文件startup_stm32f10x_hd.s

a.首先标记了栈,堆得大小,属性和对齐
b.标记向量表,里面存放着中断函数的地址
c.Reset_Handle标号处,也是程序启动,里面导入了systemInit和__main函数并调用,systemInit中设置了时钟,在__main中会调用用户的main函数
d.定义了中断服务函数,并且是weak类型,用户可以在程序中重复定义一个同名的
e.判断是否定义了__microlib,做堆栈初始化

3.systick

系统定时器是cm3内核中的外设,通常用作系统的心跳,24bit的向下递减

4.比特率于波特率的区别

比特率是每秒传输多少位,波特率是每秒钟传输了多少个码元, 而码元是通讯信号调制的概念,通讯中常用
时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。如常见的通讯传输中,
用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元
等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有 0V、
2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即
两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的
一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示
比特率,虽然严格来说没什么错误,但希望您能了解它们的区别 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32