没有合适的资源?快使用搜索试试~ 我知道了~
STM32学习笔记STM32学习笔记
需积分: 12 73 下载量 148 浏览量
2011-05-08
19:17:59
上传
评论 2
收藏 474KB PDF 举报
温馨提示
试读
11页
STM32学习笔记STM32学习笔记STM32学习笔记STM32学习笔记STM32学习笔记STM32学习笔记
资源推荐
资源详情
资源评论
2011 年 1 月 15 日 星期六
SysTick 是 MDK 定义了的一个结构体(在 stm32f10x_map.里面),里面包含 CTRL、 LOAD、
VAL、CALIB 等 4 个寄存器,
我自己理解为要是使用 systick 时钟是肯定要对这个寄存器进行设置的。具体到什么事寄存
器什么为什么内部会是这个样子,那我就不得而知了 但是我懂得这个是配置必须的东西而
且这个寄存器是被 mdk 定义为了一个结构体 stm32f10x_map
今天算是又学到了一招
利用 mdk 里边右键里面有一个 go to definition 可以跟踪到这个元素的初始的位置,就相当
于是找到它最为原始的定义。
然后找到了一些个
U8 u16 u32 等等的含义 哈哈原来 STM32 就是如此的简单 当然群里的威力也是很大的。
typedef signed long s32;
typedef signed short s16;
typedef signed char s8;
typedef signed long const sc32; /* Read Only */
typedef signed short const sc16; /* Read Only */
typedef signed char const sc8; /* Read Only */
typedef volatile signed long vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
typedef volatile signed long const vsc32; /* Read Only */
typedef volatile signed short const vsc16; /* Read Only */
typedef volatile signed char const vsc8; /* Read Only */
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef unsigned long const uc32; /* Read Only */
typedef unsigned short const uc16; /* Read Only */
typedef unsigned char const uc8; /* Read Only */
typedef volatile unsigned long vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile unsigned long const vuc32; /* Read Only */
typedef volatile unsigned short const vuc16; /* Read Only */
typedef volatile unsigned char const vuc8; /* Read Only */
2011 年 1 月 16 日星期日
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
我现在有点不明白 CTRL 之前设置的有相应的选择,为什么这个地方只要第0 位置位就行了,
而不需要相应的其他设置了,比较郁闷
但是后便的不难理解,首先 do-while 语句就是先执行 do{}内的内容,再判断 while{}内的内
容,如果 while 中的内容为非 0,则再返回 do{}内执行,再判断 while{},直到 while{}内部条件
按为 0,跳出循环。、
就目前来说的话 delay int 就是初始化那块的话,就是一个瞬间的设置,可以理解为像是
12864 那个液晶一样,进行的一个初始化,之后就不用再去处理了,它应该会一直选择外部
时钟。
现在是下午的 14 点 53 分,我今天也是到论坛上去请教了高手,现在我真正的明白了,首先
第一个对 CTRL 初始化设置,SysTick->CTRL&=0xfffffffb;//bit2 清空,选择外部时
钟 HCLK/8 这一步因为用到的是&方式,也就是只是把 bit2 清空了,也就是选择了外部时
钟 STCLK。
接着下边的演示程序中,所用到的对 CTRL 寄存器的设置中,开启定时器的设置方式最好为:
SysTick->CTRL|=0x0001 ;因为这样的话不会影响到其他的配置。
同理关闭计数器 SysTick->CTRL&=0xFFFE;这样比较合适。
下边是我在论坛上高手帮助我的回答。
第一个问题:
SysTick->CTRL&=0xfffffffb;//bit2 清空,选择外部时钟 HCLK/8 此处是将 CTRL 寄存
器设置为外部时钟,其余项都是置位状态
这里你看看 SysTick->CTRL 的默认值就知道了,SysTick->CTRL 在复位后的状态为 0X0000,
也就是全零。这里我的 SysTick->CTRL&=0xfffffffb;//bit2 清空,其实只是清空 bit2,其
他位,原来是什么状况,在执行这句之后,还是什么状况。注意这里用的是&。
第二个问题:
SysTick->CTRL=0x01 ; //开始倒数 而在这一步当中又把 CTRL 寄存器的相当
于 只是把第 0 位开启了,也就是开启了倒数,而其他的位全部不都是变为了 0 么?这一点
不会对相应的前面的设置造成影响么? 比如 CTRL 的 16 位,2 位,1 位造不成影响么?
这里,其实我的设置真是有不妥的,只是在使用的时候,恰好不影响之前的设置(bit2,本
来就该设置为 1)。所以结果是正确的。但是这样设置是不妥的。最好就是
SysTick->CTRL|=0x0001 ; 这样,就完美了。
同样,在结束延时之后:
SysTick->CTRL=0x00; //关闭计数器
应该改为:
SysTick->CTRL&=0xFFFE; //关闭计数器
15::31
现在学习的是板子上边一些 I/o 口的设置内容,请教了高手,问他们用不用把相关的包括位
带操作理解掉,结果高手说不用,确实之前我也看了,但是着实不好理解啊。我去啊!!!云
里雾里的。
2011 年 1 月 17 日星期一
刚看到了 STM32 的倍频函数,这个东西的具体如何设置的,我现在还不能很好的理解,但
是我知道倍频的范围 2-16 倍
void Sys_Soft_Reset(void)
{
SCB->AIRCR =0X05FA0000|(u32)0x04;
}
在 Sys_Soft_Reset 函数里面,我们只是对 SCB-> AIRCR 进行了一次操作,即实现了 STM32
的软复位。AIRCR 寄存器的个位定义如下图所示:
剩余10页未读,继续阅读
资源评论
shenmiao0330
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功