如何用C#控制GPIO???

caterpillar54321 caterpillar54321 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
操作系统是64位Win7

我要用C#来控制GPIO,请问该如何操作?

具体的需求是这样的,用C#做的一个截取屏幕的程序,读取指定区域图像的RGB信息,然后传给GPIO口

分别有8个GPI口和8个GPO口,我只需要用到GPO口就可以

SingleName PinNo. GPIO register DATA
*****************************************************
GOP_23 | 79 | LD6_CRD1[3] |0:low 1:high
GOP_22 | 78 | LD6_CRD1[2] |0:low 1:high
GOP_21 | 77 | LD6_CRD1[1] |0:low 1:high
GOP_20 | 76 | LD6_CRD1[0] |0:low 1:high
GOP_27 | 83 | LD6_CRD1[7] |0:low 1:high
GOP_26 | 82 | LD6_CRD1[6] |0:low 1:high
GOP_25 | 81 | LD6_CRD1[5] |0:low 1:high
GOP_24 | 80 | LD6_CRD1[4] |0:low 1:high


这两天一直忙活这个,但还是一点儿头绪也没有,在C#版里发帖也没人回,希望有知道的好心人麻烦给指点一下。

下面是从网上找的一段代码,不知道有什么问题。



[DllImport("kernel32.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
internal static extern int DeviceIoControl(
IntPtr hDevice,
int dwIoControlCode,
byte[] lpInBuffer,
int nInBufferSize,
byte[] lpOutBuffer,
int nOutBufferSize,
ref int lpBytesReturned,
IntPtr lpOverlapped);

[DllImport("kernel32.dll")]
private static extern IntPtr CreateFile(
string lpFileName,
// 要打开的串口名称
uint dwDesiredAccess,
// 指定串口的访问方式,一般设置为可读可写方式
int dwShareMode,
// 指定串口的共享模式,串口不能共享,所以设置为0
int lpSecurityAttributes,
// 设置串口的安全属性,WIN9X下不支持,应设为NULL
int dwCreationDisposition,
// 对于串口通信,创建方式只能为OPEN_EXISTING
int dwFlagsAndAttributes,
// 指定串口属性与标志,设置为FILE_FLAG_OVERLAPPED( 重叠I/O操作 ),指定串口以异步方式通信
int hTemplateFile
// 对于串口通信必须设置为NULL
);

private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const int OPEN_EXISTING = 3;

public Form1()
{
InitializeComponent();
}

private void GPIO测试_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
IntPtr gpiodriver = CreateFile("GIO20:", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
、、就是这一句出错


if (gpiodriver == (IntPtr)(-1))
{
MessageBox.Show("打开GPIO设备失败!");
}
else
{

int bytesReturned = 0;
DeviceIoControl(gpiodriver, 0x01, null, 0, null, 0, ref bytesReturned, IntPtr.Zero);
}
}



还有今天主板的公司发来邮件说“编写M840主板GPIO 需要用Winddk(Vc6+winddk VS2005)来编写.SYS和Dll的库

AP随便用哪个版本写,VC, .NET都可以写”

还想请教一下这个.sys和dll该如何写。

问的问题有点儿多,还望不吝赐教!!!

我再多加点儿分!!!
...全文
评论 19
收藏 已收藏
分享
返回顶部