网上看到很多人也是脱离固件库进行stm32开发的,但是我不知道具体是怎么弄的,要用到哪些头文件?我只包含了一个 stm32f10x.h 但是会报错。
求大神指导
17 个解决方案
#1
对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关
#2
包含一个 reg52.h 就行了。
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
#3
看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。
然后参照数据手册和STM32的库,可以定义自己的库函数。
多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。
另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。
然后参照数据手册和STM32的库,可以定义自己的库函数。
多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。
另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。
#4
我看网上有人是只包含了stm32f10x.h,里面包含了所有寄存器的定义,(http://hi.baidu.com/kernel_007/item/f2174fd07ef34f1721e250bb) 但是我包含这个文件就会报错:
C:\KeilSTM32\ARM\Inc\ST\STM32F10x\stm32f10x.h(80): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#5
哈哈,我确实是新手,我只是觉得库函数那么多,那么繁琐。因为以前学单片机都是对寄存器进行操作,然后自己调通之后把范例程序保存下来,还是感觉直接操作寄存器简单明了,库函数又多又长。
网上和书上有很多介绍在keil中使用库函数、需要哪些文件,但是很少介绍不用库函数的,搭建这个环境我搞了很长时间了还是没搞好。
你说的这个头文件必须自己定义吗,没有现成的吗?网上貌似有人只包含了 stm32f10x.h
#6
也就是说确实只要包含一个stm32f10x.h文件就可以了是吗?有没有一个例示的工程让我看一下啊,只要一个完整的工程文件夹就可以了,我可以看看里面到底是怎么配置的
#7
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
#8
思路不对,固件库也要,是将所有库封装成.dll,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
#9
为啥不要?库很方便
#10
这个错误只要在包含stm32f10x.h之前宏定义个芯片类型,或者直接在项目选项 预处理定义一个芯片的宏就可以了
#11
stm32f10x_lib.h
#12
谢谢各位回复,这几天没搞STM32,在做一个东西,明天开始继续STM32。看看这几天的成果吧:
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32
#13
ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。
#14
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
谢谢!我上网查了,也有人说是缺少一个宏定义,但是我不清楚到底怎么弄。不过现在都搞好了,不用 stm32f10x.h,而是用stm32f10x_lib.h。还是按照使用库函数的方法来建立keil工程的,但是编程时不用库函数,只用寄存器
#15
思路不对,固件库也要,是将所有库封装成.dll,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
我现在只用 stm32f10x_lib.h 一个头文件,不用stm32f10x.h 了
#16
ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。
谢谢!我看了,确实很不错 http://pan.baidu.com/share/link?shareid=450752&uk=3993209745#dir/path=%2FALIENTEK%20STM32%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99%E9%9B%86%2FALIENTEK%20%E6%88%98%E8%88%B0STM32%E5%BC%80%E5%8F%91%E6%9D%BF%E6%9C%80%E6%96%B0%E4%BE%8B%E7%A8%8B
#17
大家好,我最近在捣鼓STM32, GPIOD>CRL&=0XFFFFF0FF; GPIOD->CRL|=0X00000300;比如说这两句是对PD2的一些设置,但是如果我要设置PD3呢?应该怎样写啊?也就是说我没有理解这两个0XFFFFF0FF,0X00000300的意思。希望你能帮助我解决这个困惑谢谢!!!期待你们的回复。
#1
对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关
#2
包含一个 reg52.h 就行了。
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
#3
看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。
然后参照数据手册和STM32的库,可以定义自己的库函数。
多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。
另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。
然后参照数据手册和STM32的库,可以定义自己的库函数。
多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。
另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。
#4
包含一个 reg52.h 就行了。
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
我看网上有人是只包含了stm32f10x.h,里面包含了所有寄存器的定义,(http://hi.baidu.com/kernel_007/item/f2174fd07ef34f1721e250bb) 但是我包含这个文件就会报错:
C:\KeilSTM32\ARM\Inc\ST\STM32F10x\stm32f10x.h(80): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#5
看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。
然后参照数据手册和STM32的库,可以定义自己的库函数。
多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。
另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。
哈哈,我确实是新手,我只是觉得库函数那么多,那么繁琐。因为以前学单片机都是对寄存器进行操作,然后自己调通之后把范例程序保存下来,还是感觉直接操作寄存器简单明了,库函数又多又长。
网上和书上有很多介绍在keil中使用库函数、需要哪些文件,但是很少介绍不用库函数的,搭建这个环境我搞了很长时间了还是没搞好。
你说的这个头文件必须自己定义吗,没有现成的吗?网上貌似有人只包含了 stm32f10x.h
#6
对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关
也就是说确实只要包含一个stm32f10x.h文件就可以了是吗?有没有一个例示的工程让我看一下啊,只要一个完整的工程文件夹就可以了,我可以看看里面到底是怎么配置的
#7
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
#8
思路不对,固件库也要,是将所有库封装成.dll,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
#9
为啥不要?库很方便
#10
包含一个 reg52.h 就行了。
类似这个的头文件,STM32都以那个库的形式提供
如果要脱离,那也好办
自己重新定义各种寄存器的地址。。。
都一样的
我看网上有人是只包含了stm32f10x.h,里面包含了所有寄存器的定义,(http://hi.baidu.com/kernel_007/item/f2174fd07ef34f1721e250bb) 但是我包含这个文件就会报错:
C:\KeilSTM32\ARM\Inc\ST\STM32F10x\stm32f10x.h(80): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
这个错误只要在包含stm32f10x.h之前宏定义个芯片类型,或者直接在项目选项 预处理定义一个芯片的宏就可以了
#11
stm32f10x_lib.h
#12
谢谢各位回复,这几天没搞STM32,在做一个东西,明天开始继续STM32。看看这几天的成果吧:
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32
#13
ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。
#14
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。
你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。
我机器里的这个版本的stm32f10x.h没有这个东西。
你可以找到stm32f10x.h中有这个提示的地方
#error directive: "Please select first the targe...
看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了
谢谢!我上网查了,也有人说是缺少一个宏定义,但是我不清楚到底怎么弄。不过现在都搞好了,不用 stm32f10x.h,而是用stm32f10x_lib.h。还是按照使用库函数的方法来建立keil工程的,但是编程时不用库函数,只用寄存器
#15
思路不对,固件库也要,是将所有库封装成.dll,
再增加个
#include "stm32f10x_lib.h"
每次用编译只是调用中间件,编译飞快,,
我现在只用 stm32f10x_lib.h 一个头文件,不用stm32f10x.h 了
#16
ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。
谢谢!我看了,确实很不错 http://pan.baidu.com/share/link?shareid=450752&uk=3993209745#dir/path=%2FALIENTEK%20STM32%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99%E9%9B%86%2FALIENTEK%20%E6%88%98%E8%88%B0STM32%E5%BC%80%E5%8F%91%E6%9D%BF%E6%9C%80%E6%96%B0%E4%BE%8B%E7%A8%8B
#17
大家好,我最近在捣鼓STM32, GPIOD>CRL&=0XFFFFF0FF; GPIOD->CRL|=0X00000300;比如说这两句是对PD2的一些设置,但是如果我要设置PD3呢?应该怎样写啊?也就是说我没有理解这两个0XFFFFF0FF,0X00000300的意思。希望你能帮助我解决这个困惑谢谢!!!期待你们的回复。