Приложение Windows 10 Iot Core аварийно завершает работу, если я пытаюсь открыть пин-код PWM

Я хочу открыть штифт PWM для моего зуммера. Но если я попытаюсь вызвать метод pwmController.OpenPin(6), приложение вылетит с ошибкой System.Runtime.InteropServices.SEHException.

Я уже перепроверил источники примеров, такие как ms- iot-образцы. Но я не вижу, в чем мои проблемы.

Идея была в том, что некоторые разрешения отсутствуют, но если я попытаюсь добавить, например, <iot:Capability Name="lowLevelDevices" />, я больше не смогу собрать приложение.

Источник

private PwmPin buzzerPin;
private PwmController pwmController;

public RainbowHAT()
{
    // ... do something else
    InitAsync();
}

private async void InitAsync()
{
    Logger.Log(this, "Init");

    // Setup PWM controller.
    if (LightningProvider.IsLightningEnabled)
    {
        LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
    }

    var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());
    if (pwmControllers == null || pwmControllers.Count < 2)
    {
        throw new OperationCanceledException("Operation canceled due missing GPIO controller");
    }

    pwmController = pwmControllers[1];
    pwmController.SetDesiredFrequency(50);

    // Setup buzzer
    buzzerPin = pwmController.OpenPin(13); <-- CRASH
    buzzerPin.SetActiveDutyCyclePercentage(0.05);
    buzzerPin.Start();
}

Я также попробовал следующий совет , чтобы уменьшить минимальную требуемую Windows версия, но и это не помогает.


person Tobonaut    schedule 30.05.2019    source источник


Ответы (1)


ШИМ-контроллеру нужна поддержка Lightning. Поэтому вам нужно установить драйвер контроллера как Direct Драйвер с отображением памяти. Вот пример ШИМ на Raspberry Pi.

введите здесь описание изображения

Вам также необходимо изменить код следующим образом:

    private async void InitAsync()
    {
        Logger.Log(this, "Init");

        // Setup PWM controller.
        if (LightningProvider.IsLightningEnabled)
        {
            var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());
            if (pwmControllers == null || pwmControllers.Count < 2)
            {
                throw new OperationCanceledException("Operation canceled due missing GPIO controller");
            }

            pwmController = pwmControllers[1];
            pwmController.SetDesiredFrequency(50);

            // Setup buzzer
            buzzerPin = pwmController.OpenPin(13);
            buzzerPin.SetActiveDutyCyclePercentage(0.05);
            buzzerPin.Start();
        }
    }
person Michael Xu - MSFT    schedule 31.05.2019
comment
Идеальный. Благодарю вас! - person Tobonaut; 31.05.2019
comment
ПРИМЕЧАНИЕ. Драйверы молнии все еще являются экспериментальными. В настоящее время, когда драйвер DMM включен (Lightning), доступ к контроллерам I2C прерывается. - person Chris Schaller; 17.06.2019