Ⅰ 关于stm32神舟3号开发板的流水灯问题
GPIO_Pin_7是在文件"stm32f10x_gpio.h"里定义的。首先,卖家提供的源码应该有相应的工程的,你可以参考下他的工程配置是怎么管理的;其次,在头文件#include"stm32f10x.h"里查找看下有没有包含文件"stm32f10x_gpio.h",没有包含的话,是找不到GPIO_Pin_7的定义的;最后,在"stm32f10x.h"里包含有"stm32f10x_conf.h",而"stm32f10x_conf.h"里面包含"stm32f10x_gpio.h",所以,你看下以上包含路径对没有,没有对的话,就应该修改过来。
Ⅱ 什么样的gpio才需要用can_sleep
使用。使用下面的函数以区别于正常的GPIO int gpio_get_value_cansleep(unsigned gpio);//读GPIO void gpio_set_value_cansleep(unsigned gpio, int value);//写GPIO ——————————————- 这句话的意思:如果soc本身(比如100个)gpio不够用, 那么就要另外接一个gpio controller, 上面再提供额外的50个gpio,这个controller连接到soc上是通过总线比如i2c总线连上去的。这个时候写gpio值,就是通过i2c总线去写新加的那个gpio controller的寄存器的值,所以有可能会有睡眠发生,所以要用can_sleep. ==================================================== gpio ====== 头文件:linux/gpio.h 实现文件:driver/gpio/gpiolib.c 参考文件:Doccumentation/gpio.txt 准备工作———— 为了驱动具体的设备,驱动程序常常需要系统中的各类资源进行申请,形如以下调用 –>gpio_request(gpio_num, "led gpio"); //申请GPIO,用做led –>request_irq(irq_no, irq_handler, IRQF_DISABLED, irq_name, &irq_data);//申请中断 上述gpio_request()就实现了对应GPIO申请的功能。下面是使用GPIO的一般性过程 申请GPIO->设置GPIO方向->设置其他功能(上拉,下拉)->输入或输出值->释放GPIO 相应的函数如下 int gpio_request(unsigned gpio, const char *label);//申请GPIO void gpio_free(unsigned gpio);//释放GPIO int gpio_direction_input(unsigned gpio);//设置为输入 int gpio_direction_output(unsigned gpio, int value);//设置为输出 int gpio_set_debounce(unsigned gpio, unsigned debounce); int __gpio_get_value(unsigned gpio);//读GPIO 通常是inline函数 void __gpio_set_value(unsigned gpio, int value);//设置GPIO 对于有些挂载在I2C,SPI总线上的扩展GPIO,读写操作可能会导致睡眠,因此不能在中断函数中 使用。
Ⅲ 请教关于STM32的问题
GPIOB在这里是一个结构体指针,是指向GPIO_TypeDef这样的一个结构体,并且强制将该结构体指针指向的地址为GPIOB_BASE,一般情况下是不允许对绝对地址空间的操作,但是在这里可以。下面的宏定义#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \ ((PERIPH) == GPIOB) || \ ((PERIPH) == GPIOC) || \ ((PERIPH) == GPIOD) || \ ((PERIPH) == GPIOE) || \ ((PERIPH) == GPIOF) || \ ((PERIPH) == GPIOG))也是合法的,后面的斜杠\标识连接着的意思,等效于:#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) …)assert_param(IS_GPIO_ALL_PERIPH(GPIOx));这句主要是判断传进函数中的参数GPIOx是否有效,因为GPIOx必须是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG这几个当中的其中一个,否则会被认为是无效的参数。assert_param(xxxxxxxx)就是判断参数是否有效,但在实际情况下并不使用,因为宏定义中:#ifdef USE_FULL_ASSERT #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) void assert_failed(uint8_t* file, uint32_t line);#else #define assert_param(expr) ((void)0)#endif 因为一般情况下USE_FULL_ASSERT是没有被定义的,assert_param(xxxxxxxx)就等于((void)0),什么也没有做。
Ⅳ STM32寄存器头文件定义
这个是寄存器地址的操作问题,地址值,这个地址(或理解为指针)是UINT型而已,对着数据手册就看明白了。
Ⅳ //GPIO_SetBits(GPIOC, GPIO_Pin_13); GPIO_SetBits(GPIOC, 13);
“//”是注释符,其后面的内容不是程序,是注释。如是代码要将两斜杠去掉才行。
Ⅵ stm32头文件问题
因为,stm32f10x.h中包含了一系列的标准库头文件,其中就包括了stm32f10x_gpio.h,但是,一定要确保宏配制正确!查看一下stm32f10x.h源代码就清楚了
Ⅶ 如何使用头文件
1. 不是“拷贝”而是“连接”,头文件与源文件没有一一对应的关系,头文件的作用只是为了“声明”,对函数来说告诉引用这个头文件的源文件某个函数是怎么存在的,这就跟你在一个C文件中写程序时候,在main()前面写一句 int funcOOXX();,然后跑到后面去实现int funcOOXX();是一个道理。只不过如果几个文件都要调用int funcOOXX()的话,你要在多个c文件中写int funcOOXX();这个定义很多遍,当你修改这个函数时候也要改很多个声明,不方便。所以就出现了头文件,在头文件里声明一遍然后大家include就好。此外,编译器不知道gpio.c存在吗?不,他也许人为的知道了,被IDE包裹的编译器有时候会骗你,但是你直接调用编译器 gcc main.c或者 cl main.c的时候会发现很可能编译不了。也就是说,即使没有头文件,只有c文件,大家也能工作的很好,头文件和源文件对编译器来说根本不存在一一对应关系,大家有时起一样的名字只是为了看起来有些联系而已。2. 有些库可能被隐藏的包含了。头文件里理所当然的难以看到具体算法实现。3. 能隐藏源代码的只有编译好的二进制库,若是下载了源代码,那不是没有实现,你没找到而已。
Ⅷ stm32怎样直接操作gpio寄存器
看手册,学习stm32一定要养成看手册的习惯,最好看英文版的,因为翻译过来的毕竟有一些不符合原作者的意图,要靠自己。想查询这么基础的设置问题,直接ctrl+F查找关键字就能找到你想要答案,其实很简单,不用给分了。首先,两个都是C语言。 从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直…
Ⅸ 请问STM32程序中的这几个头文件,各有什么作用
都是.c文件,不是头文件啊。stm32f10x_it.c 中断处理函数都放在这个文件里面。main.c 这个不用解释了吧stm32f10x.h 这个是头文件,它包含了stm32的一些常用宏,寄存器结构体的定义,高版本的库还放着中断向量表。stm32f10x_rcc.c 这个文件里的固件函数包含了一些对复位、时钟的控制的函数stm32f10x_gpio.c这个文件里的固件函数包含了对GPIO的操作函数stm32_eval.c 这个是st公司为其制作的评估板写的程序system_stm32f10x.c主要包含了对系统时钟设置,一般是对倍频时钟的设置 具体可以看一下文件内容啊,呵呵 欢迎追问 追问: 您好,非常感谢您!我是刚刚学习STM32。我还有几个问题。三、GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;u8 count=0;四、void Delay(vu32 nCount);希望您能帮助我,我会给您高分的。 回答: 1、因为引脚本来就是16个的啊,从pin0~pin15,GPIOA口有16个脚,GPIOB也有16个,GPIOC也有16个,是这样区分的,它是相对于一组io口的细分,ALL来代替的是选中了这一组io 2、不可以,呵呵你要选择到底是GPIOA还是GPIOB还是…C还是…D等等的GPIO_Pin_03、GPIO_InitTypeDef、ErrorStatus是两个结构体,u8是定义的unsigned char你可以通过keil的go to definition选项找到它们的定义,这个是标准C的定义 4、不是,这两个是函数。你的C语言基础太差,估计很多都看不懂吧,呵呵,建议先补习一下C语言 欢迎追问 追问: 嗯,是的C语言基础不太好,以前学单片机主要是用汇编。