搜索
bottom↓
回复: 15

STM32F750外设在Linux系统下的操作

[复制链接]

出0入0汤圆

发表于 2018-12-11 15:18:44 | 显示全部楼层 |阅读模式
本帖最后由 htjgdw 于 2018-12-11 15:34 编辑

上周发了新出的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脚本调用。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-12-11 15:48:06 | 显示全部楼层
谢谢分享!

出0入4汤圆

发表于 2018-12-11 19:33:01 | 显示全部楼层
W25Q256怎么读

出0入0汤圆

 楼主| 发表于 2018-12-11 20:00:32 | 显示全部楼层

SPI Flash是存放代码和文件系统的,可以在挂载(mount)之后,在linux系统里存取文件。
如果你要想要像上面那些外设一样通过命令读写存储器,我给你一个例子看看,里面讲的是I2C EEPROM但是原理都是一样的。
Accessing I2C Devices in Linux

出0入22汤圆

发表于 2018-12-11 20:36:55 | 显示全部楼层
有没有linux下开发应用程序的教程?

出0入0汤圆

 楼主| 发表于 2018-12-11 21:03:42 | 显示全部楼层
zxq6 发表于 2018-12-11 20:36
有没有linux下开发应用程序的教程?

没有专门针对STM32 Linux的。因为不同平台的Linux都是相通的只要OS转起来了,后面的开发大同小异。
我试着按普通PC上的linux C程序方法写了几个小程序(hello world之类)用arm gcc编译器编译后下载到板子上正常运行没有问题。

出0入22汤圆

发表于 2018-12-11 21:31:21 来自手机 | 显示全部楼层
htjgdw 发表于 2018-12-11 21:03
没有专门针对STM32 Linux的。因为不同平台的Linux都是相通的只要OS转起来了,后面的开发大同小异。
我试 ...

我的意思是添加外设哈,比如使用dma功能,或者pwm,或者timer中断这种。不会是已经全部内置驱动了的吧?

出0入0汤圆

发表于 2018-12-11 22:49:08 | 显示全部楼层
LZ这个板子是自动布线的吧?

出0入0汤圆

发表于 2018-12-11 23:19:14 来自手机 | 显示全部楼层
跑的是主线还是uclinux?

出0入0汤圆

发表于 2018-12-12 08:08:44 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2018-12-12 08:38:17 | 显示全部楼层
zxq6 发表于 2018-12-11 21:31
我的意思是添加外设哈,比如使用dma功能,或者pwm,或者timer中断这种。不会是已经全部内置驱动了的吧? ...

这些驱动都已经有了,你编译内核的时候可以选择添加或者不加。

出0入0汤圆

 楼主| 发表于 2018-12-12 08:39:11 | 显示全部楼层
avr-arm 发表于 2018-12-11 23:19
跑的是主线还是uclinux?

emcraft的官方介绍显示是主线Linux4.2

出0入0汤圆

发表于 2018-12-12 08:44:48 | 显示全部楼层
stm32也要玩linux了,这个让玩pc的用起来方便多了

出0入0汤圆

发表于 2018-12-12 08:58:15 | 显示全部楼层
htjgdw 发表于 2018-12-12 08:39
emcraft的官方介绍显示是主线Linux4.2

https://www.emcraft.com/products/413#software

Emcraft supports Linux (uClinux) as an operating system for the STM32F7 System-On-Module (SOM). This page provides the release files of the STM32F7 SOM Linux BSP (Board Support Package) and the Linux software development environment.
All STM32F7 System-On-Modules come preloaded with uClinux and U-Boot. Full source code of the Linux BSP and U-Boot is provided for free download, along with a Linux cross-development environment. Both U-Boot and uClinux are roaylty-free.

应该就是ucLinux了

出0入0汤圆

 楼主| 发表于 2018-12-12 09:05:17 | 显示全部楼层
avr-arm 发表于 2018-12-12 08:58
https://www.emcraft.com/products/413#software

Emcraft supports Linux (uClinux) as an operating sy ...

我是从下面的版本开始用emcraft linux的

https://emcraft.com/news/newsletter-200

Release 2.0.0 of Linux Cortex-M

A new version of the Emcraft Embedded Linux distribution targeting the STM32F4 System-on-Module is now available. This release introduces two noteworthy features. These are the new kernel version and an integration with the Eclipse IDE.

The Linux kernel ver. 4.2 is a big improvement compared to the previously supported version 2.6. Thousands of people participated in this development. Here are a few specific improvements that may benefit you in your next project:

    Support for new USB, Wi-Fi, and Bluetooth devices;
    An ability to mount large flash file systems quickly, shortening boot up time;
    More options for profiling and debugging.

Another new feature in this release is an integration with the Eclipse IDE. It allows debugging of user-space applications on the target using the familiar Eclipse GUI.

Active customers are invited to download the release 2.0.0 here. Or, here is a link to the release notes.

出0入0汤圆

发表于 2018-12-12 09:07:10 | 显示全部楼层
htjgdw 发表于 2018-12-12 09:05
我是从下面的版本开始用emcraft linux的

https://emcraft.com/news/newsletter-200

哦,谢谢,我详细看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 10:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表