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

[复制链接]
8374|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 | 显示全部楼层

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

 楼主| lianshumou 发表于 2008-7-2 12:53 | 显示全部楼层

选错表情了!

很奇怪的是ST的文档里有关NVIC的描述很少!  硬件的那个中断分配到NVIC的那条线上也没有描述! 这个库可封得够彻底啊!  非得要我去看库的源文件!
 楼主| lianshumou 发表于 2008-7-2 12:55 | 显示全部楼层

使用例子

    RCC->CR.B.PLLON = 1;
    RCC->CR.W = 0xffff;
 楼主| lianshumou 发表于 2008-7-2 12:58 | 显示全部楼层

操作例子说明

RCC->CR.B.PLLON = 1;        //位段操作,一次操作只更改感兴趣的位段
RCC->CR.W = 0xffff;         //整个寄存器一次操作,一次操作整个寄存器
香水城 发表于 2008-7-2 13:35 | 显示全部楼层

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

这部分内容是在ARM公司关于Cortex-M3的文档中,有关NVIC一章中。
 楼主| lianshumou 发表于 2008-7-2 13:52 | 显示全部楼层

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

香水城 发表于 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
 楼主| lianshumou 发表于 2008-7-2 14:28 | 显示全部楼层

那个地儿我看了好几遍!

还是看得不认真啊! 谢了先
fjhcpu 发表于 2008-7-3 14:08 | 显示全部楼层

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

simon21ic 发表于 2008-7-3 14:25 | 显示全部楼层

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

建议用宏来封装寄存器的各个功能,编程方便,而且移植时只需要修改宏就可以了
 楼主| lianshumou 发表于 2008-7-3 16:37 | 显示全部楼层

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

头文件适合当前所有STM32的器件,根据芯片更改宏后自动屏蔽相应的硬件!
直接位段操作,不用记库里那一堆函数. 更直观!
computer00 发表于 2008-7-3 16:43 | 显示全部楼层

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

simon21ic 发表于 2008-7-3 16:46 | 显示全部楼层

LS:看了一下

建议寄存器的定义加上volatile,小心莫名其妙的错误,哈哈
 楼主| 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;
Swd21ic 发表于 2008-7-3 21:33 | 显示全部楼层

没必要

尽量减少位域
 楼主| lianshumou 发表于 2008-7-3 22:04 | 显示全部楼层

大部分只是在初始化用!

和个人习惯有关!
computer00 发表于 2008-7-4 09:33 | 显示全部楼层

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

560

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部