ST原来的那个什么库操作方式实在是用不惯. 将头文件改为寄存器可位段访问的方式.方便多了!
反正CM3是支持位段操作的, 所以新方式比库操作更直观,效率也没降低!
谢谢楼主分享一下
直接操作寄存器肯定比使用库函数效率高,但使用库函数可以较快上手,熟悉了之后要求高效率时,最好直接操作寄存器。
选错表情了!
很奇怪的是ST的文档里有关NVIC的描述很少! 硬件的那个中断分配到NVIC的那条线上也没有描述! 这个库可封得够彻底啊! 非得要我去看库的源文件!
使用例子
RCC->CR.B.PLLON = 1;
RCC->CR.W = 0xffff;
操作例子说明
RCC->CR.B.PLLON = 1; //位段操作,一次操作只更改感兴趣的位段
RCC->CR.W = 0xffff; //整个寄存器一次操作,一次操作整个寄存器
请参考ARM公司的文档《Cortex-M3技术参考手册》
这部分内容是在ARM公司关于Cortex-M3的文档中,有关NVIC一章中。
这个文档里没有有关STM32的中断定义,只是NVIC的通用说明
硬件的哪个中断分配到NVIC的哪条线上的描述
请看STM32技术参考手册的第8.1.2节Interrupt and exception vectors,表35列出了所有中断源的分配。
相关链接:
http://www.st.com/stonline/products/literature/rm/13902.pdf
那个地儿我看了好几遍!
还是看得不认真啊! 谢了先
直接操作寄存器可能使得项目难以移植
建议用宏来封装寄存器的各个功能,编程方便,而且移植时只需要修改宏就可以了
当然是用宏和数据结构封装
头文件适合当前所有STM32的器件,根据芯片更改宏后自动屏蔽相应的硬件!
直接位段操作,不用记库里那一堆函数. 更直观!
LS:看了一下
建议寄存器的定义加上volatile,小心莫名其妙的错误,哈哈
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;
simon21ic提醒得对要加volatile!!