标签: gpio

Linux 中的 outb() 函数调用是什么?

有人可以解释一下的意思吗

outb(0x10,short_base+2);
Run Code Online (Sandbox Code Playgroud)

我试图通过谷歌搜索来弄清楚,但没有用。

function linux-kernel gpio hardware-port

2
推荐指数
2
解决办法
9557
查看次数

max732x.c I2C IO 扩展器 + GPIO 键,带 Linux 设备树不工作

我正在使用飞思卡尔 MX6 和飞思卡尔 3.10.31 修改内核。我有一个用作 IO 扩展器的 Maxim MAX7325,它的按钮连接到 P0-P2。来自 7325 的中断线连接到 GPIO_3 焊盘(我认为是 GPIO1_3...)

我在设备树中设置了 7325 和 gpio-keys,如下所示:

max7325_reset: max7325-reset {
  compatible = "gpio-reset";
  reset-gpios = <&gpio5 16 GPIO_ACTIVE_LOW>;
  reset-delay-us = <1>;
  #reset-cells = <0>;
};


gpio-keys {
  compatible = "gpio-keys";

  sw2 {
     gpios = <&max7325 2 GPIO_ACTIVE_LOW>;
     linux,code = <30>;    //a
     gpio-key,wakeup;
  };
};
Run Code Online (Sandbox Code Playgroud)

&i2c1 {
   clock-frequency = <100000>;
   pinctrl-names = "default";
   pinctrl-0 = <&pinctrl_i2c1_2>;
   status = "okay";

   max7325: gpio@68 {
      compatible = "maxim,max7325";
      reg = <0x68>; …
Run Code Online (Sandbox Code Playgroud)

linux-device-driver gpio device-tree max732x.c

2
推荐指数
1
解决办法
2582
查看次数

在linux内核模块中访问GPIO的步骤是怎样的?

我正在努力找出从 linux 内核模块访问 gpio-pin 需要哪些步骤。也许有人可以通过一个简单的例子向我解释它。我喜欢使用引脚 4(输入)和 33(输出)。到目前为止我的步骤:

1.) 设备树(dts):我保持 dts 文件不变 - 我是否需要通过引脚控制设置引脚 4 和 33?

2.) 内核模块:一些伪代码

gpio_is_valid(4)
gpio_request_one(4, GPIOF_DIR_IN | GPIOF_EXPORT_DIR_FIXED , "myPin4")
gpio_export(4, false)
gpio_get_value(4)

gpio_is_valid(33)
gpio_request_one(33, GPIOF_DIR_OUT | GPIOF_INIT_LOW | GPIOF_OPEN_SOURCE | GPIOF_EXPORT_DIR_FIXED , "myPin33")
gpio_export(33, false)
gpio_set_value(33, 1)
Run Code Online (Sandbox Code Playgroud)

如何以正确的方式做到这一点?

linux linux-device-driver linux-kernel embedded-linux gpio

2
推荐指数
1
解决办法
4354
查看次数

STM32 F103C8T6 并非所有引脚都工作

我使用的是带有 STM32F103C8T6 的 arduino nano 风格开发板。我注意到单端口的某些引脚工作正常,但其他引脚根本不工作。我正在使用 CMSIS v.5.0.1 库和 Keil v.5.23 IDE。

例子:

int main (void){
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    GPIOB->CRL &= ~(GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5 | GPIO_CRL_CNF3 | GPIO_CRL_CNF4 | GPIO_CRL_CNF5);
    GPIOB->CRL |= (GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5);
    GPIOB->BSRR = (0x38 << 16);
    while (1){
    }
}
Run Code Online (Sandbox Code Playgroud)

我有 3 个 LED,通过电阻通过阴极连接到 PB3、PB4 和 PB5,只有连接到 PB5 的 LED 才会发光。反向连接(阳极到引脚)并将其驱动为高电平

GPIOB->BSRR = 0x38;
Run Code Online (Sandbox Code Playgroud)

没有任何改变,改变输出速度并将它们配置为开漏输出不会产生任何结果。我尝试直接通过 st-link 调试模式切换引脚 - 结果相同,PB5 工作正常,PB3 - PB4 不起作用。我什至尝试驾驶整个港口

int main (void){
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    GPIOB->CRL = 0x55555555; …
Run Code Online (Sandbox Code Playgroud)

stm32 keil gpio

2
推荐指数
1
解决办法
2967
查看次数

PWM DMA 到整个 GPIO

我有一个 STM32F4,我想对一个已与掩码进行“或”运算的 GPIO 端口进行 PWM 处理。

因此,也许我们想要以0b00100010200khz 进行一段时间的 PWM,但是,10khz 后,我们现在想要进行 PWM 0b00010001...然后,10kHz 后,我们想要在同一 GPIO 上对其他一些掩码进行 PWM。

我的问题是,如何使用 DMA 做到这一点?我正在尝试触发一个 DMA 传输,该传输将在上升沿设置所有位,然后触发另一个 DMA 传输,该传输将在下降沿清除所有位。

我还没有找到一个好的方法来做到这一点(至少使用 CubeMX 以及我对 C 和 STM32 的有限经验),因为看起来我只有机会在上升沿做一些事情。

我主要关心的问题之一是 CPU 时间,因为尽管我在上面的示例中提到了数百千赫兹,但我想让这个框架非常强大,因为它不会浪费 CPU 资源。这就是为什么我喜欢 DMA 的想法,因为它是专用硬件,可以无意识地将这里的一个单词提升到那里的一个单词之类的东西,而 CPU 可以做其他事情,比如处理 PID 的数字或其他东西。

编辑 为了清楚起见:我有一组 6 个值,可以写入 GPIO。它们存储在一个数组中。我想要做的是设置一个 PWM 定时器来在 PWM 的正宽度期间设置 GPIO,然后我希望在低周期宽度期间将 GPIO 设置为 0b00000000(如果 pwm. 因此,我需要查看上升沿何时,快速写入GPIO,然后查看下降沿何时,并向GPIO写入0。

arm stm32 dma gpio pwm

2
推荐指数
1
解决办法
4747
查看次数

STM32F103 GPIO 端口

我有一个STM32F103C8 MCU,我想在没有Cube MX的情况下控制GPIO寄存器。MCU 有一个嵌入式 LED,我想控制它。我目前正在使用 CubeMX 和 IAR 软件,并使用以下代码将引脚设为输出(在 CubeMX 中):

HAL_GPIO_TogglePin(Ld2_GPIO_Port,Ld2_Pin); 
HAL_Delay(1000); 
Run Code Online (Sandbox Code Playgroud)

这有效,但我想在没有 Cube 和 HAL 库的情况下做到这一点;我想直接编辑寄存器文件。

c embedded arm stm32 gpio

2
推荐指数
1
解决办法
3927
查看次数

如何设置虚拟 GPIO 环回

我目前正在开发一个应该在.Net 中使用 gpio 引脚的程序。我想在虚拟 GPIO 引脚上测试我的程序,但我不知道该怎么做。

我想做一个环回,将虚拟 GPIO 1 连接到另一个虚拟 GPIO 2。

我已经对串口和 tty0tty 做了类似的事情。

另外,我在Ubuntu上。

.net testing ubuntu virtual gpio

2
推荐指数
1
解决办法
1093
查看次数

我可以使用递归来处理GPIO吗?

我是使用基于ARM Cortex M3的STM32f100RB的新手.我试图使用递归来处理GPIO输入,但它不起作用.任何人都可以告诉我为什么?代码如下.它应该设置GPIOc引脚9,当GPIOa引脚0为1.但它只是不起作用..

我不确定我是否可以发布这样的问题.如果不合适,请告诉我.谢谢.

    void detect_input(void);

    void main()
    {
        init_ports();
        detect_input();
        while(1)
        {
            GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET);//turn on the green led
        }
    }

    void detect_input()
    {
        if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
        {
        detect_input();
        }
   }
Run Code Online (Sandbox Code Playgroud)

c embedded stm32 gpio

1
推荐指数
1
解决办法
441
查看次数

Python打印语法错误rasberry pi

我正在用运动传感器设置我的覆盆子pi.我正在使用modmypie中的一些简单代码python代码.我从终端窗口运行代码,但SyntaxError: invalid syntax 继续print (“Motion Detected!”).这是一个如此简单的路线,但无法弄清楚问题是什么.

# coding: utf-8    

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM)

PIR_PIN = 7

GPIO.setup(PIR_PIN, GPIO.IN)

def MOTION(PIR_PIN):

     print “Motion Detected!”

print “PIR Module Test (CTRL+C to exit)”

time.sleep(2)

print “Ready”

try:

    GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MOTION)

    while 1:

       time.sleep(100)

except KeyboardInterrupt:

    print “ Quit”

    GPIO.cleanup()
Run Code Online (Sandbox Code Playgroud)

python python-2.7 gpio raspberry-pi raspbian

1
推荐指数
1
解决办法
1166
查看次数

如何使用gpiozero button.when_pressed函数使用输入和输出整数的函数?

我正在尝试对Raspberry Pi上的按钮进行编程,以将一个整数添加到另一个整数,以便可以while通过检查变量mod 2是否为0来在循环中的条件之间来回切换。我本质上是在尝试while通过检查变量是奇数还是偶数来翻转循环中的条件。

我正在尝试使用该gpiozero库的when_pressed函数,但是它似乎无法调用添加和输出整数的函数。

所以,我的代码是:

from gpiozero import Button
btn = Button(17) #the button is wired to GPIO pin 17

def addSurf(a):
    a = a + 1
    return(a)

x = 0
btn.when_pressed = addSurf(x)

while True:
    if x == 0:
        #do some stuff
    else:
        #do some other stuff
Run Code Online (Sandbox Code Playgroud)

为什么我尝试运行此程序,我明白了TypeError: unsupported operand type(s) for +: 'Button' and 'int'

如何使用该btn.when_pressed函数使用输入和输出整数的函数?

或者,是否还有其他[更好的]方法来使按钮在while循环中切换两个状态?

python function while-loop gpio raspberry-pi

1
推荐指数
1
解决办法
2610
查看次数