打印

求助:关于使用STM32V3.5固件库

[复制链接]
11118|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dwlovehome|  楼主 | 2011-7-27 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dwlovehome 于 2011-7-27 15:40 编辑

是这样子的,最近买了一个板子,是例说STM32出的板子。
板子的Demo中,有个设置响应优先级和抢断优先级的函数
他使用的头文件是#include <stm32f10x_lib.h>
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)  
{
。。。。。。。
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级                  
我自己下载了一个STM32 V3.5的固件库。
我包含的头文件是#include "stm32f10x.h"
也想使用这个函数来设置响应优先级和抢断优先级
但是会出现IPR没有定义这个问题。
error #136   struct"<unnamed>"has no field "IPR"
后来找了半天,发现IPR实在stm32f10x_map.h
中定义的一个结构体
typedef struct 
{
  vu32 ISER[2];
  u32  RESERVED0[30];
  vu32 ICER[2];
  u32  RSERVED1[30];
  vu32 ISPR[2];
  u32  RESERVED2[30];
  vu32 ICPR[2];
  u32  RESERVED3[30];
  vu32 IABR[2];
  u32  RESERVED4[62];
  vu32 IPR[15];
} NVIC_TypeDef;
但是stm32f10x_map.h这个文件我在v3.5的库里面没有找到,现在怎么办哈
我自己在文件中加上上述的定义也不行。
沙发
香水城| | 2011-7-27 17:22 | 只看该作者
在目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的core_cm3.h中有这样的定义,你可以借用:

 
typedef struct
{
  __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */
       uint32_t RESERVED0[24];                                   
  __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */
       uint32_t RSERVED1[24];                                    
  __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */
       uint32_t RESERVED2[24];                                   
  __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */
       uint32_t RESERVED3[24];                                   
  __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */
       uint32_t RESERVED4[56];                                   
  __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */
       uint32_t RESERVED5[644];                                 
  __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */
}  NVIC_Type;                                               

使用特权

评论回复
板凳
dwlovehome|  楼主 | 2011-7-27 20:52 | 只看该作者
2# 香水城

您好,请问下这个该怎么借用啊,我还是小白一个,希望可以指点下,比如这个代码怎么改下;
全部代码如下:
 
#include <stm32f10x_lib.h>
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)  
{
u32 temp;
u8 IPRADDR=NVIC_Channel/4;  //每组只能存4个,得到组地址
u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
IPROFFSET=IPROFFSET*8+4;    //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);   
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf;//取低四位
if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//使能中断位(要清除的话,相反操作就OK)
else NVIC->ISER[1]|=1<<(NVIC_Channel-32);   
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级                  
}

使用特权

评论回复
地板
CreatAll| | 2011-7-28 09:55 | 只看该作者
简单点就是在你的文件上面 #include “core_cm3.h"。但一定要主要包含这个文件的路径
========================================================
我也很纳闷,你说ST公司搞的这个库,为什么变来变去的???

估计很多人在换库的时候都遇到这样的问题!!

使用特权

评论回复
5
dwlovehome|  楼主 | 2011-7-28 12:24 | 只看该作者
4# CreatAll
包含了#include"core_cm3.h"这个库没用。
关键是下面代码里面的IPR未定义。"core_cm3.h"里面定义的是IP
 
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先

使用特权

评论回复
6
香水城| | 2011-7-28 12:30 | 只看该作者
书中提供的例子是按照写书当时的固件库版本而写的,如果你自己要把这些例子移植到新版本的固件库上,就应该先搞懂原有的例子是怎么工作的,然后再考虑移植;不要还没有学会走路,就想学跑步,要循序渐进的,:D

使用特权

评论回复
7
wangzhihai1986| | 2011-7-28 12:33 | 只看该作者
你哪个库是3.0以前的版本了,3.0以后都叫做标准外设库了,比一前的明了多了,我最开始就是用2.0.3的,后来升级到3.1.2,也是出了很多问题,感觉这两个版本差别太大,没法升级似的,后来搞好后,感觉新版本很不错。给你个完整的程序学习下,呵呵。

UCOS2.86&FATFS0.08b(多个任务多个信号量).rar

425.57 KB

使用特权

评论回复
8
yinyangdianzi| | 2011-7-28 13:37 | 只看该作者
geili求证

使用特权

评论回复
9
CreatAll| | 2011-7-28 16:07 | 只看该作者
sorry,我4楼的回答太草率了

不过你这样的问题,最好还是多花点时间研究透,要不你不明白每个定义的具有意思,要换库,而又要借用以前库的程序估计够呛

就像你这个问题其实只要明白 NVIC_TypeDef的各个定义就OK了,但是要换的麻烦估计头疼……

使用特权

评论回复
10
dwlovehome|  楼主 | 2011-8-1 12:49 | 只看该作者
谢谢大家了,问题解决了,感激不尽

使用特权

评论回复
11
yanhaiyuyuyu| | 2012-4-26 21:30 | 只看该作者
受教了……

使用特权

评论回复
12
probug| | 2012-5-7 15:54 | 只看该作者
学到些了

使用特权

评论回复
13
wjwj1212| | 2013-3-18 23:59 | 只看该作者
求楼主解决的方法。NVIC->IPR[IPRADDR]|=temp<<IPROFFSET ..\SYSTEM\sys\sys.c(76): error:  #136: struct "<unnamed>" has no field "IPR"

使用特权

评论回复
14
wjwj1212| | 2013-3-19 00:01 | 只看该作者
dwlovehome 发表于 2011-8-1 12:49
谢谢大家了,问题解决了,感激不尽

求楼主解决的方法。NVIC->IPR[IPRADDR]|=temp<<IPROFFSET ..\SYSTEM\sys\sys.c(76): error:  #136: struct "<unnamed>" has no field "IPR"

使用特权

评论回复
15
山水之乐| | 2013-5-8 20:34 | 只看该作者
wjwj1212 发表于 2013-3-19 00:01
求楼主解决的方法。NVIC->IPR|=temp

void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)         
{
        u32 temp;       
        MY_NVIC_PriorityGroupConfig(NVIC_Group);//ÉèÖ÷Ö×é
        temp=NVIC_PreemptionPriority<<(4-NVIC_Group);          
        temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
        temp&=0xf;//È¡µÍËÄλ

        if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//ʹÄÜÖжÏλ(ÒªÇå³ýµÄ»°,Ïà·´²Ù×÷¾ÍOK)
        else NVIC->ISER[1]|=1<<(NVIC_Channel-32);   

        NVIC->IP[NVIC_Channel]|=temp;//ÉèÖÃÏìÓ¦ÓÅÏȼ¶ºÍÇÀ¶ÏÓÅÏȼ¶                                                           
}
改为这样是不是就可以呢……

使用特权

评论回复
16
__小黑先生| | 2013-8-9 15:32 | 只看该作者

使用特权

评论回复
17
chuangpu| | 2013-8-9 20:24 | 只看该作者
学到了一点东西   谢谢了   楼主  表示顶一个

使用特权

评论回复
18
云淡风轻2011| | 2013-9-14 15:51 | 只看该作者
楼主,你好!我跟你遇到的问题是一模一样的,我想问一下,你是怎么解决这个问题的?求教!!!

使用特权

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

本版积分规则

8

主题

41

帖子

0

粉丝