打印

改了两天,终于改完STM32的头文件了!

[复制链接]
7244|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lianshumou|  楼主 | 2008-7-2 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST原来的那个什么库操作方式实在是用不惯. 将头文件改为寄存器可位段访问的方式.方便多了!
反正CM3是支持位段操作的, 所以新方式比库操作更直观,效率也没降低! 
沙发
skyler| | 2008-7-2 12:41 | 只看该作者

贴个例子

贴个函数出来给大家学习,看看是否更易用

使用特权

评论回复
板凳
香水城| | 2008-7-2 12:43 | 只看该作者

谢谢楼主分享一下

直接操作寄存器肯定比使用库函数效率高,但使用库函数可以较快上手,熟悉了之后要求高效率时,最好直接操作寄存器。

使用特权

评论回复
地板
lianshumou|  楼主 | 2008-7-2 12:51 | 只看该作者

等我检查完后传上来吧! 里面可能还有错!需要查

使用特权

评论回复
5
lianshumou|  楼主 | 2008-7-2 12:53 | 只看该作者

选错表情了!

很奇怪的是ST的文档里有关NVIC的描述很少!  硬件的那个中断分配到NVIC的那条线上也没有描述! 这个库可封得够彻底啊!  非得要我去看库的源文件!

使用特权

评论回复
6
lianshumou|  楼主 | 2008-7-2 12:55 | 只看该作者

使用例子

    RCC->CR.B.PLLON = 1;
    RCC->CR.W = 0xffff;

使用特权

评论回复
7
lianshumou|  楼主 | 2008-7-2 12:58 | 只看该作者

操作例子说明

RCC->CR.B.PLLON = 1;        //位段操作,一次操作只更改感兴趣的位段
RCC->CR.W = 0xffff;         //整个寄存器一次操作,一次操作整个寄存器

使用特权

评论回复
8
香水城| | 2008-7-2 13:35 | 只看该作者

请参考ARM公司的文档《Cortex-M3技术参考手册》

这部分内容是在ARM公司关于Cortex-M3的文档中,有关NVIC一章中。

使用特权

评论回复
9
lianshumou|  楼主 | 2008-7-2 13:52 | 只看该作者

这个文档里没有有关STM32的中断定义,只是NVIC的通用说明

使用特权

评论回复
10
香水城| | 2008-7-2 14:02 | 只看该作者

硬件的哪个中断分配到NVIC的哪条线上的描述

请看STM32技术参考手册的第8.1.2节Interrupt and exception vectors,表35列出了所有中断源的分配。
相关链接:http://www.st.com/stonline/products/literature/rm/13902.pdf

使用特权

评论回复
11
lianshumou|  楼主 | 2008-7-2 14:28 | 只看该作者

那个地儿我看了好几遍!

还是看得不认真啊! 谢了先

使用特权

评论回复
12
fjhcpu| | 2008-7-3 14:08 | 只看该作者

直接操作寄存器习惯些,象AVR头文件样就好了!

使用特权

评论回复
13
simon21ic| | 2008-7-3 14:25 | 只看该作者

直接操作寄存器可能使得项目难以移植

建议用宏来封装寄存器的各个功能,编程方便,而且移植时只需要修改宏就可以了

使用特权

评论回复
14
lianshumou|  楼主 | 2008-7-3 16:37 | 只看该作者

当然是用宏和数据结构封装

头文件适合当前所有STM32的器件,根据芯片更改宏后自动屏蔽相应的硬件!
直接位段操作,不用记库里那一堆函数. 更直观!

使用特权

评论回复
15
computer00| | 2008-7-3 16:43 | 只看该作者

哈哈~~~俺的简单例子也是直接操作寄存器的~~~否则,

使用特权

评论回复
16
simon21ic| | 2008-7-3 16:46 | 只看该作者

LS:看了一下

建议寄存器的定义加上volatile,小心莫名其妙的错误,哈哈

使用特权

评论回复
17
lianshumou|  楼主 | 2008-7-3 17:01 | 只看该作者

WWDG的

typedef struct
{
    union
    {
        struct
        {
            vu32 T            :7;
            vu32 WDGA        :1;
            vu32 NC            :24;
        } B;
        vu32 W;
    } CR;
    union
    {
        struct
        {
            vu32 W            :7;
            vu32 WDGTB        :2;
            vu32 EWI        :1;
            vu32 NC            :22;
        } B;
        vu32 W;
    } CFR;
    union
    {
        struct
        {
            vu32 EWIF        :1;
            vu32 NC            :31;
        } B;
        vu32 W;
    } SR;
} WWDG_TypeDef;

使用特权

评论回复
18
Swd21ic| | 2008-7-3 21:33 | 只看该作者

没必要

尽量减少位域

使用特权

评论回复
19
lianshumou|  楼主 | 2008-7-3 22:04 | 只看该作者

大部分只是在初始化用!

和个人习惯有关!

使用特权

评论回复
20
computer00| | 2008-7-4 09:33 | 只看该作者

哈哈~~~中午急急忙忙写的,忘记加volatile拉……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

560

帖子

1

粉丝