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

zgyzsq   2008-7-2 12:39 楼主
ST原来的那个什么库操作方式实在是用不惯. 将头文件改为寄存器可位段访问的方式.方便多了!
反正CM3是支持位段操作的, 所以新方式比库操作更直观,效率也没降低! 

回复评论 (19)

贴个例子

                                 贴个函数出来给大家学习,看看是否更易用
点赞  2008-7-2 12:41

谢谢楼主分享一下

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

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

                                  
点赞  2008-7-2 12:51

选错表情了!

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

使用例子

    RCC->CR.B.PLLON = 1;
    RCC->CR.W = 0xffff;
点赞  2008-7-2 12:55

操作例子说明

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

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

                                 这部分内容是在ARM公司关于Cortex-M3的文档中,有关NVIC一章中。
点赞  2008-7-2 13:35

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

                                  
点赞  2008-7-2 13:52

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

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

那个地儿我看了好几遍!

                                 还是看得不认真啊! 谢了先
点赞  2008-7-2 14:28

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

                                  
点赞  2008-7-3 14:08

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

                                 建议用宏来封装寄存器的各个功能,编程方便,而且移植时只需要修改宏就可以了
点赞  2008-7-3 14:25

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

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

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

一个简单例子要把裤扯出来,没完没了的……

http://bbs.eeworld.com.cn/club/bbs/list.asp?boardid=49&t=3019910&tp=%u81EA%u5DF1%u52A8%u624B%u521B%u5EFA%u4E00%u4E2A%u57FA%u4E8E%u4E07%u5229STM32%u677F%u7684IAR%u5DE5%u7A0B
点赞  2008-7-3 16:43

LS:看了一下

                                 建议寄存器的定义加上volatile,小心莫名其妙的错误,哈哈
点赞  2008-7-3 16:46

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;
点赞  2008-7-3 17:01

没必要

                                 尽量减少位域
点赞  2008-7-3 21:33

大部分只是在初始化用!

                                 和个人习惯有关!
点赞  2008-7-3 22:04

simon21ic提醒得对要加volatile!!

                                  
点赞  2008-7-4 09:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复