问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C#怎么写UART、SPI、I2C、CAN总线上测试时的数据程序?

发布网友 发布时间:2022-04-21 15:56

我来回答

2个回答

热心网友 时间:2023-11-15 00:36

针对 树莓派 封装的 UWP应用 类,以下代码未经测试,聊以抛砖引玉:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.Gpio;
using Windows.Storage.Streams;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;
using Windows.Devices.I2c;
using Windows.Devices.Spi;
namespace SlotAgentApp.Services
{
public class DevicesHelper
{
public static void GPIO(int eLevel=0, int ioPortNumber = 5)
{
// 获得系统板载缺省GPIO controller
GpioController gpio = GpioController.GetDefault();
if (gpio == null)
return; // 如果系统板载无可用GPIO,则返回
// 打开指定的GPIO
using (GpioPin pin = gpio.OpenPin(ioPortNumber))
{
// Latch HIGH value first. This ensures a default value when the pin is set as output
pin.Write(eLevel==0? GpioPinValue.Low: GpioPinValue.High);
// 设置IO为输出方向
pin.SetDriveMode(GpioPinDriveMode.Output);
} //关闭 pin - will revert to its power-on state
}
#region 示例代码
/*
(一)GPIO接口使用
*/
public void GPIO()
{
// Get the default GPIO controller on the system
GpioController gpio = GpioController.GetDefault();
if (gpio == null)
return; // GPIO not available on this system
// Open GPIO 5
using (GpioPin pin = gpio.OpenPin(5))
{
// Latch HIGH value first. This ensures a default value when the pin is set as output
pin.Write(GpioPinValue.High);
// Set the IO direction as output
pin.SetDriveMode(GpioPinDriveMode.Output);
} // Close pin - will revert to its power-on state
}
/*
(二) UART接口
Pin 8 - UART0 TX
Pin 10- UART0 RX
下面的例子先是初始化UART0,然后做了一次读操作和一次写操作
*/
public async void Serial()
{
string aqs = SerialDevice.GetDeviceSelector("UART0"); /* Find the selector string for the serial device */
var dis = await DeviceInformation.FindAllAsync(aqs); /* Find the serial device with our selector string */
SerialDevice SerialPort = await SerialDevice.FromIdAsync(dis[0].Id); /* Create an serial device with our selected device */
/* Configure serial settings */
SerialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.BaudRate = 9600;
SerialPort.Parity = SerialParity.None;
SerialPort.StopBits = SerialStopBitCount.One;
SerialPort.DataBits = 8;
/* Write a string out over serial */
string txBuffer = "Hello Serial";
DataWriter dataWriter = new DataWriter();
dataWriter.WriteString(txBuffer);
uint bytesWritten = await SerialPort.OutputStream.WriteAsync(dataWriter.DetachBuffer());
/* Read data in from the serial port */
const uint maxReadLength = 1024;
DataReader dataReader = new DataReader(SerialPort.InputStream);
uint bytesToRead = await dataReader.LoadAsync(maxReadLength);
string rxBuffer = dataReader.ReadString(bytesToRead);
}
/*
使用上面的例子时,需要在Package.appxmanifest 中修改下权限修改如下
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
*/
/*
(三)I2C 总线
Pin 3 - I2C1 SDA
Pin 5 - I2C1 SCL
下面的例子首先初始化I2C1 然后向地址为0x40的I2C设备写数据
*/
public async void I2C()
{
// Get a selector string for bus "I2C1"
string aqs = I2cDevice.GetDeviceSelector("I2C1");
// Find the I2C bus controller with our selector string
var dis = await DeviceInformation.FindAllAsync(aqs);
if (dis.Count == 0)
return; // bus not found
// 0x40 is the I2C device address
var settings = new I2cConnectionSettings(0x40);
// Create an I2cDevice with our selected bus controller and I2C settings
using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings))
{
byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
device.Write(writeBuf);
}
}
/*
(四) SPI 总线
Pin 19 - SPI0 MOSI
Pin 21 - SPI0 MISO
Pin 23 - SPI0 SCLK
Pin 24 - SPI0 CS0
Pin 26 - SPI0 CS1
下面的例子向SPI0 做了一次写操作
*/
public async void SPI()
{
// Get a selector string for bus "SPI0"
string aqs = SpiDevice.GetDeviceSelector("SPI0");
// Find the SPI bus controller device with our selector string
var dis = await DeviceInformation.FindAllAsync(aqs);
if (dis.Count == 0) ;
return; // "SPI0" not found on this system
// Use chip select line CS0
var settings = new SpiConnectionSettings(0);
// Create an SpiDevice with our bus controller and SPI settings
using (SpiDevice device = await SpiDevice.FromIdAsync(dis[0].Id, settings))
{
byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
device.Write(writeBuf);
}
}
#endregion
}
}

热心网友 时间:2023-11-15 00:36

C# 如何控制这些总线?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 示波器如何读I2C数据,图在下面,大家帮我读一下,信号抓的应该是全的 I2C芯片(24c01)将全部地址都检查一次的方法,求教 如何测试带CLock Stretch功能的I2C从机 stm32F407的硬件I2C稳定吗 404 Not Found I2C压力测试怎么写测试用例? STM32 硬件I2C 到底是不是个坑 i2c 在Linux下编程,测试i2c模块是否能正常通信 请教i2c驱动测试 Linux交流区 ARM9之家论坛 从机是怎么检测I2C信号的 如何检测i2c的开始条件和结束条件 stm32硬件i2c缺陷解决方法 现在淘集集停止运营了,我货没收到,也登录不了淘集集app,我该怎么办? 会阴侧切率PDCA 简述戴明环管理过程基本内涵 如何提升运营人员工作效率? 怎么写8S演讲稿 如何制定一个改善计划? pdca培训中能够加深印象的互动游戏怎么办? 请帮忙把下列乱码繁体中文翻译成简体,谢谢 如何测试IIC通讯成功 用linux 调用内核中的统一I2C驱动 i2c总是 busy,求大神支招,谢谢! 程序很短 我在淘集集上下了单,现在淘集集打不开,买的东西也没有发回来? 高手帮忙看看STM32模拟I2C为什么接收不到数据 请教I2C超时处理 “便当”是什么意思? 眼角有|脂肪粒该怎么办? 怎样祛除眼角的脂肪粒 眼角处有脂肪粒,怎么预防啊? 眼角长了很多脂肪粒,怎么办 眼角长了脂肪粒怎么办 眼角下的脂肪粒怎么去 眼角有好多脂肪粒怎么办? 眼角有脂肪粒怎么办 眼角下有脂肪粒是怎么回事?怎样才能没有啊? CAJViewer什么地方下载 CAJViewer 7.0.2英文版 CAJviewer阅读器无法使用怎么办 cajviewer 6.0 那里有下载的??急!! CAJViewer 7.1.2与7.2那个版本高?