stm32不用固件库,需要哪些头文件

时间:2022-06-29 16:47:37
我想要的开发方式类似于51单片机,包含一个 reg52.h 就行了。
网上看到很多人也是脱离固件库进行stm32开发的,但是我不知道具体是怎么弄的,要用到哪些头文件?我只包含了一个 stm32f10x.h 但是会报错。
求大神指导

17 个解决方案

#1


对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关

#2


包含一个 reg52.h 就行了。

类似这个的头文件,STM32都以那个库的形式提供

如果要脱离,那也好办

自己重新定义各种寄存器的地址。。。

都一样的

#3


看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。

然后参照数据手册和STM32的库,可以定义自己的库函数。

多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。

另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。

#4


引用 2 楼 lbing7 的回复:
包含一个 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


引用 3 楼 youzi722 的回复:
看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。

然后参照数据手册和STM32的库,可以定义自己的库函数。

多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。

另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。

哈哈,我确实是新手,我只是觉得库函数那么多,那么繁琐。因为以前学单片机都是对寄存器进行操作,然后自己调通之后把范例程序保存下来,还是感觉直接操作寄存器简单明了,库函数又多又长。
网上和书上有很多介绍在keil中使用库函数、需要哪些文件,但是很少介绍不用库函数的,搭建这个环境我搞了很长时间了还是没搞好。
你说的这个头文件必须自己定义吗,没有现成的吗?网上貌似有人只包含了 stm32f10x.h

#6


引用 1 楼 woshi_ziyu 的回复:
对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关

也就是说确实只要包含一个stm32f10x.h文件就可以了是吗?有没有一个例示的工程让我看一下啊,只要一个完整的工程文件夹就可以了,我可以看看里面到底是怎么配置的

#7


当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。

你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。

我机器里的这个版本的stm32f10x.h没有这个东西。

你可以找到stm32f10x.h中有这个提示的地方

#error directive: "Please select first the targe...

看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了

#8


思路不对,固件库也要,是将所有库封装成.dll, 
再增加个
#include "stm32f10x_lib.h"

每次用编译只是调用中间件,编译飞快,,

#9


为啥不要?库很方便

#10


引用 4 楼 nicekwell 的回复:
Quote: 引用 2 楼 lbing7 的回复:

包含一个 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。看看这几天的成果吧:
stm32不用固件库,需要哪些头文件
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32

#13


ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。

#14


引用 7 楼 youzi722 的回复:
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。

你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。

我机器里的这个版本的stm32f10x.h没有这个东西。

你可以找到stm32f10x.h中有这个提示的地方

#error directive: "Please select first the targe...

看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了

谢谢!我上网查了,也有人说是缺少一个宏定义,但是我不清楚到底怎么弄。不过现在都搞好了,不用 stm32f10x.h,而是用stm32f10x_lib.h。还是按照使用库函数的方法来建立keil工程的,但是编程时不用库函数,只用寄存器

#15


引用 8 楼 vc8fans 的回复:
思路不对,固件库也要,是将所有库封装成.dll, 
再增加个
#include "stm32f10x_lib.h"

每次用编译只是调用中间件,编译飞快,,

我现在只用 stm32f10x_lib.h 一个头文件,不用stm32f10x.h 了

#16


引用 13 楼 xujianxiang 的回复:
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都以那个库的形式提供

如果要脱离,那也好办

自己重新定义各种寄存器的地址。。。

都一样的

#3


看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。

然后参照数据手册和STM32的库,可以定义自己的库函数。

多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。

另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。

#4


引用 2 楼 lbing7 的回复:
包含一个 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


引用 3 楼 youzi722 的回复:
看STM32的用户手册,自己定义一个类似reg52.h 的头文件,不就是一堆寄存器的地址么,或者再高级点,向stm32库中那样将各个模块的寄存器组整成结构体变量的样子.如果不会,请参考STM32库里的头文件,并去看C语言。

然后参照数据手册和STM32的库,可以定义自己的库函数。

多说一句:如果从做项目的角度看,拿来主义才是最好的方案,自己做上述这些纯粹是画蛇添足,因为STM32的库比较稳定,效率也还可以;但如果是一个初学者的探索,个人觉得这样的精神是值得鼓励的,因为在做这些工作的过程中,你会学到很多东西。

另外,好像ucos官方提供的stm32版本的内核中似乎用的不是官方库,是自定义的,可以参考一下。

哈哈,我确实是新手,我只是觉得库函数那么多,那么繁琐。因为以前学单片机都是对寄存器进行操作,然后自己调通之后把范例程序保存下来,还是感觉直接操作寄存器简单明了,库函数又多又长。
网上和书上有很多介绍在keil中使用库函数、需要哪些文件,但是很少介绍不用库函数的,搭建这个环境我搞了很长时间了还是没搞好。
你说的这个头文件必须自己定义吗,没有现成的吗?网上貌似有人只包含了 stm32f10x.h

#6


引用 1 楼 woshi_ziyu 的回复:
对于硬件只需要这个头文件提供相应的寄存器 至于报错和你的代码有关

也就是说确实只要包含一个stm32f10x.h文件就可以了是吗?有没有一个例示的工程让我看一下啊,只要一个完整的工程文件夹就可以了,我可以看看里面到底是怎么配置的

#7


当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。

你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。

我机器里的这个版本的stm32f10x.h没有这个东西。

你可以找到stm32f10x.h中有这个提示的地方

#error directive: "Please select first the targe...

看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了

#8


思路不对,固件库也要,是将所有库封装成.dll, 
再增加个
#include "stm32f10x_lib.h"

每次用编译只是调用中间件,编译飞快,,

#9


为啥不要?库很方便

#10


引用 4 楼 nicekwell 的回复:
Quote: 引用 2 楼 lbing7 的回复:

包含一个 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。看看这几天的成果吧:
stm32不用固件库,需要哪些头文件
磁悬浮和电子钟合体,当做桌面装饰品,不过单片机用的是51的,以后学会stm32了再用stm32

#13


ALIENTEK MiniSTM32开发板例程 你可以看这个,应该比较合你的口味,我也是51转过来的,也很不适应stm32库的架构。

#14


引用 7 楼 youzi722 的回复:
当然也可以只包含stm32f10x.h了,因为这个文件里就是一堆寄存器的地址宏定义而已。

你上面列出的错误,是stm32f10x.h需要你定义使用的那个芯片,应该是用一个宏来定义。

我机器里的这个版本的stm32f10x.h没有这个东西。

你可以找到stm32f10x.h中有这个提示的地方

#error directive: "Please select first the targe...

看是哪个宏来决定输出或不输出上述语句,然后定义相关的宏,就可以了

谢谢!我上网查了,也有人说是缺少一个宏定义,但是我不清楚到底怎么弄。不过现在都搞好了,不用 stm32f10x.h,而是用stm32f10x_lib.h。还是按照使用库函数的方法来建立keil工程的,但是编程时不用库函数,只用寄存器

#15


引用 8 楼 vc8fans 的回复:
思路不对,固件库也要,是将所有库封装成.dll, 
再增加个
#include "stm32f10x_lib.h"

每次用编译只是调用中间件,编译飞快,,

我现在只用 stm32f10x_lib.h 一个头文件,不用stm32f10x.h 了

#16


引用 13 楼 xujianxiang 的回复:
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的意思。希望你能帮助我解决这个困惑谢谢!!!期待你们的回复。