[STM32F7]

STM32F750外设在Linux系统下的操作

[复制链接]
2825|19
手机看帖
扫描二维码
随时随地手机跟帖
不爱说话|  楼主 | 2018-12-11 15:37 | 显示全部楼层 |阅读模式
上周发了新出的STM32F750成功运行Linux
有很多朋友对在Linux下使用STM32外设很感兴趣,今天我简单介绍一下如何使用Linux命令操作外设。

在Linux下各种设备都被抽象成文件,对设备的操作控制转化成对相应文件的读写操作。STM32F750 linux也是这样的,下面举几个例子希望对STM32 linux感兴趣的朋友起到抛砖引玉的作用。
在linux控制台终端可以使用cat命令读取显示文件,echo命令将数据写入文件。

1.GPIO
在F750板子上提供了一个用户按键和一个用户LED,通过对GPIO的操作就可以读取按键、开关LED了。
LED(PE3)
/ # echo 67 > /sys/class/gpio/export            // PE3对应的linux系统gpio号(16*4+3=67),设置成功后会在/sys/class/gpio路径下生成一个名为gpio67的目录
/ # echo out > /sys/class/gpio/gpio67/direction        // 设置为PE3输出
/ # echo 1 > /sys/class/gpio/gpio67/value        // 点亮LED
/ # echo 0 > /sys/class/gpio/gpio67/value        // 关闭LED

按键(PB5)
/ # echo 21 > /sys/class/gpio/export            // PB5对应的linux系统gpio号(16*1+5=21)
/ # echo in > /sys/class/gpio/gpio21/direction        // 设置为输入
/ # cat /sys/class/gpio/gpio21/value            // 读取按键值,如果按下按键,返回0;松开按键,返回1

2.PWM输出(PB4, TIM3 CH1)
/ # echo 0 > /sys/class/pwm/pwmchip0/export        // 申请pwm0设备
/ # echo 10000000 > /sys/class/pwm/pwmchip0/pwm0/period // 设置PWM周期为10ms
/ # echo 5000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle // 设置PWM占空比5ms
/ # echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable        // 使能PWM
/ # echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable        // 关闭PWM
/ # echo 0 > /sys/class/pwm/pwmchip0/unexport           // 释放PWM0设备资源

3.读取STM32 ADC电压值(PA0, ADC1_IN0)
/ # cat /sys/bus/iio/devices/iio\:device0/in_voltage0_in0_raw // 返回0-4095(STM32 ADC分辨率12位)的十进制数
/ # cat /sys/bus/iio/devices/iio\:device0/in_voltage_scale    // 返回一个浮点数,raw × scale = 实际检测电压值(单位:毫伏)

4.控制STM32 DAC输出电压(PA5,DAC_OUT2)
/ # echo 4095 > /dev/dac1                // 指定PA5引脚的输出电压值(10进制,0-4095,对应电压值0-3.3V)

5.读取BMP085传感器气压、温度值
/ # cat /sys/bus/i2c/devices/3-0077/pressure0_input     // 返回大气压值(单位:帕)
/ # cat /sys/bus/i2c/devices/3-0077/temp0_input         // 返回温度值(单位:0.1℃)

6.读取Si7021传感器湿度、温度值
/ # cat /sys/bus/i2c/devices/3-0040/iio\:device1/in_humidityrelative_raw        // 返回湿度原始数据(换算公式见Si7021数据手册)
/ # cat /sys/bus/i2c/devices/3-0040/iio\:device1/in_temp_raw                    // 返回温度原始数据(换算公式见Si7021数据手册)


以上只是介绍了使用命令行如何访问F750板载外设,同样的方法也可以写成应用程序(打开,读写相应设备文件即可)或者将上面这些命令写入shell脚本调用。

750_1.png

750_2.png

renzheshengui| | 2018-12-13 17:08 | 显示全部楼层
现在这个系统开源吗

使用特权

评论回复
wakayi| | 2018-12-13 17:13 | 显示全部楼层
非常感谢分享

使用特权

评论回复
wowu| | 2018-12-13 17:18 | 显示全部楼层
还没有跑过linux系统呢

使用特权

评论回复
木木guainv| | 2018-12-13 17:27 | 显示全部楼层
我只跑过rtos系统

使用特权

评论回复
不爱说话|  楼主 | 2018-12-13 23:30 | 显示全部楼层
renzheshengui 发表于 2018-12-13 17:08
现在这个系统开源吗

可以从emcraft网站下载源码,根据自己的需要裁剪。

使用特权

评论回复
yongwong9901| | 2018-12-14 09:59 | 显示全部楼层
你这个板子是在哪买的?

使用特权

评论回复
不爱说话|  楼主 | 2018-12-14 10:16 | 显示全部楼层
yongwong9901 发表于 2018-12-14 09:59
你这个板子是在哪买的?

我自己做的。

使用特权

评论回复
renzheshengui| | 2018-12-14 11:50 | 显示全部楼层
不爱说话 发表于 2018-12-13 23:30
可以从emcraft网站下载源码,根据自己的需要裁剪。

好的 非常感谢

使用特权

评论回复
muxb| | 2018-12-14 13:48 | 显示全部楼层
请问这一堆命令,是怎么和你的板子硬件联系起来的?linux内核怎么知道你的这些外设的?你不开发驱动就能实现这些功能吗?

使用特权

评论回复
不爱说话|  楼主 | 2018-12-14 14:06 | 显示全部楼层
muxb 发表于 2018-12-14 13:48
请问这一堆命令,是怎么和你的板子硬件联系起来的?linux内核怎么知道你的这些外设的?你不开发驱动就能实 ...

这些驱动都是linux里做好的,编译时选上。生成linuxl映像文件,烧到板子里,板子上电启动l后,linux系统会查找有没有这些硬件,如果有的话就会自动生成这些设备文件,用户就可以用了。
如果没有检测到相应的硬件,系统不会生成它的设备文件的。

使用特权

评论回复
muxb| | 2018-12-14 14:27 | 显示全部楼层
另外请问:
1.PE3对应的linux系统gpio号(16*4+3=67),这些计算是根据什么来的?
2.cat/echo命令后面的路径是怎么知道的?
3.命令里面带的参数是不是要去研究内核自带驱动的源码才能知道?比如:echo 10000000 > /sys/class/pwm/pwmchip0/pwm0/period // 设置PWM周期为10ms
4.既然内核带了大部分驱动,几乎覆盖了常见的硬件吧?为何还要自己开发驱动?
以上问题,谢谢。

使用特权

评论回复
不爱说话|  楼主 | 2018-12-14 14:53 | 显示全部楼层
本帖最后由 不爱说话 于 2018-12-14 18:13 编辑
muxb 发表于 2018-12-14 14:27
另外请问:
1.PE3对应的linux系统gpio号(16*4+3=67),这些计算是根据什么来的?
2.cat/echo命令后面的路 ...


我只能根据我了解的跟你说说:)
1.linux有gpio驱动的框架,gpio编号从0开始,不论什么芯片都要套用这个结构。
2.3.4我是上网搜索,根据前人的经验和其他板子的介绍总结出来的。

使用特权

评论回复
七颗咖啡豆| | 2018-12-20 17:25 | 显示全部楼层
66666666

使用特权

评论回复
hanzhen654| | 2018-12-20 21:01 | 显示全部楼层
能跑linux吗?有点强大啊

使用特权

评论回复
不爱说话|  楼主 | 2018-12-21 13:25 | 显示全部楼层
hanzhen654 发表于 2018-12-20 21:01
能跑linux吗?有点强大啊

这就是STM32能跑的linux了。
你想说的带MMU的CPU跑的linux,STM32跑不了的,因为它没有MMU。

使用特权

评论回复
syx纸飞机| | 2018-12-21 14:50 | 显示全部楼层
只接触过rtos

使用特权

评论回复
syx纸飞机| | 2018-12-21 14:50 | 显示全部楼层
只接触过rtos

使用特权

评论回复
syx纸飞机| | 2018-12-21 14:54 | 显示全部楼层
只接触过rtos

使用特权

评论回复
不爱说话|  楼主 | 2018-12-24 11:01 | 显示全部楼层
rtos看上去挺好,短小精悍,在单片机处理能力比较低的时候很受大家推崇。
但是实际要用好,需要使用者深入了解这个rtos合理调度各个任务的优先级,执行、挂起条件等等。
并且rtos一般给出的只是一个内核。网络协议栈,文件系统,控制台串口,命令等等都需要用户自己去添加,并不是每个人都能做好的。

现在单片机处理能力越来越强,已经可以担负起linux这样的系统运行时的额外cpu开销,完全可以在单片机上使用linux操作系统,让用户将更多的精力放在应用的开发上。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:飞翼电子工作室 http://shop68798667.taobao.com/

114

主题

882

帖子

34

粉丝