stm32f1-杂散类笔记

本文详细介绍了STM32F1系列的位带操作,包括位带地址的计算和指针转换。同时,解析了启动文件startup_stm32f10x_hd.s的主要功能,如栈和堆的设置、中断向量表以及系统定时器(systick)的工作原理。此外,还探讨了比特率和波特率的区别,强调在通信中两者的关系及其可能导致的误解。
摘要由CSDN通过智能技术生成

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 表示数字 05V 表示数字 1,那么一个码元可以表示两种状态 0 1,所以一个码元
等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有
0V
2V4V 以及 6V 分别表示二进制数 00011011,那么每个码元可以表示四种状态,即
两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的
一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示
比特率,虽然严格来说没什么错误,但希望您能了解它们的区别
 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值