HR都能将兴趣发挥极致,身为电子工程师的你还在犹豫什么(Funnpack第一期精彩之四)

电子森林 2020-10-28

编辑推荐语:如他介绍所言,【好大一只荣哥哥】以前是一名人力资源从业者,我们看到材料时钦佩之感油然而生,所以特意分享给大家。


BTW: Funpack第二期正在火热进行ing,虽然才结束直播刚刚一星期,但已经有朋友完成任务且提交材料。按照第一期朋友参与活动的时间,现在点击阅读原文下单参加依旧不晚。一起来玩RISC-V啊!


以下,enjoy!







Funpack第一期 - 好大一只荣哥哥

自我介绍

  • 姓名:好大一只荣哥哥
  • 公司或学校:待业,换工作过程中(前任职单位;成都伊利乳业有限责任公司)
  • 职务或专业及年级:待业人员(前任职单位:人力资源专员)

硬件介绍(控制器及外设,应用方向及应用场景)

ODYSSEY – STM32MP157C


设计思路(用板子的哪些模块实现了什么功能)

  • 通过M4核心通过GPIO控制呼吸灯。

  • 通过linux A7核心实现python驱动OLED屏幕进行显示。


指定功能演示:


一、准备工作:

软件: M obaXterm: 可串口,可SSH,可以上传文件到系统板。
     WinSCP:管理文件比MobaXterm更为方便快捷。
     Etcher:写入固件到SD卡使用。

系统板
     ②USBtoTTL转接线、面包线若干(公对公,公对母、母对母都有准备)
     ③Type-C电源线(使用手机的充电器供电)
     ④LED三色灯
     ⑤128*64 OLED屏幕
     ⑥当然还有PC端



固件写入SD卡,通过TTL转接线连接(com端口要按wiki设置正确),通电从SD卡启动,修改启动dtb为full,重启后根据官方wiki进行WiFi设置。

更新系统
    
sudo apt update

安装 vim git ssh wget curl gcc make python3 python3-pip等常用工具:
    
sudo apt install vim ssh git wget curl gcc make -y sudo apt install python3 python3-pip -y

安装对应的内核头文件,可以直接在板上编译应用程序、内核模块、设备树,避免了前期搭建交叉编译环境的麻烦。
    
sudo apt install linux-headers-$(uname -r) -y


----------------- 基础工作基本完成 ----------------

二、第一个指定功能:

驱动LED灯亮,使其实现呼吸灯的效果;//使用STM32CubeTDE调试其M4核心实现。

首先,查看wiki文档,PA3引脚可设置PWM输出,则将LED插入PA3引脚,IDE中引脚相关设置:
PA3引脚配置为M4核心使用,配置为TIM2_CH4;配置TIM2的Channel4为PWM Generation CH4,Prescaler修改为64-1,CounterMode修改为Up,CounterPeriod修改为1000-1,其余保持默认设置。

详见图片设置:


然后在main.c中进行代码的修改及编写:
main函数如下:
    
int main(void) { /* USER CODE BEGIN 1 */ uint16_t dutyCycle = 0;//定义dutyCycle变量,初始值为0 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ if(IS_ENGINEERING_BOOT_MODE()) { /* Configure the system clock */ SystemClock_Config(); } /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);//PWM引脚输出模式 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { while (dutyCycle < 1000) { dutyCycle++; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//变量小于1000时,逐渐拉高 HAL_Delay(1); } HAL_Delay(100); while (dutyCycle > 0) { dutyCycle--; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//变量大于0时,逐渐拉低 HAL_Delay(1); } HAL_Delay(400); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

修改完成之后进行编译,在CM4/debug/目录下或者 CM4/Binaries/目录下均会生成相应的.elf文件。

转到MobaXterm进行固件的上传及启动操作。ssh端进入到  /lib/firmware/ 目录下
    
cd /lib/firmware/

再执行:复制elf文件到此目录:
    
cp /home/debian/ronggege1_CM4.elf .

通过echo命令将固件进行启动准备:
    
echo ronggege1_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware

下面两条命令可开始或停止运行
    
echo start > /sys/class/remoteproc/remoteproc0/state echo stop > /sys/class/remoteproc/remoteproc0/state

查看运行状态:
    
cat /sys/class/remoteproc/remoteproc0/state

三、第二个指定功能:

成功驱动SPI、I2C、UART三个外设中的其中一个:驱动I2C -128*64 OLED屏幕,使其显示内容。

首先完成128*64 oled屏幕硬件连接,使用1,3,5,9引脚一对一连接:


安装i2c相关工具:
    
sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools

在终端输入命令查看连接状态:
    
i2cdetect -y 1

 安装Adafruit_Python_SSD1306库:
    
sudo apt-get update sudo apt-get install build-essential python-dev python-pip sudo pip install RPi.GPIO sudo apt-get install python-imaging python-smbus sudo apt-get install git git clone https://gitee.com/xingguangk/Adafruit_Python_SSD1306 cd Adafruit_Python_SSD1306 sudo python setup.py install


安装Luma.oled库:
sudo apt-get install python-dev python-pip libfreetype6-dev libjpeg-devsudo -H pip install --upgrade pipsudo apt-get purge python-pipsudo -H pip3 install --upgrade luma.oled

//luma.oled库安装较慢,需要多次重试。


安装好后我们新建一个oled.py文件,并粘贴以下内容(演示中是在Windows环境下创建好之后直接上传到debian用户根目录下)
    
from luma.core.interface.serial import i2c, spi from luma.core.render import canvas from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 # rev.1 users set port=0 # substitute spi(device=0, port=0) below if using that interface serial = i2c(port=1, address=0x3C) # substitute ssd1331(...) or sh1106(...) below if using that device device = ssd1306(serial)

while 1: with canvas(device) as draw: draw.rectangle(device.bounding_box, outline="white", fill="black") draw.text((10, 30,), "Funpack ronggege", fill="white")

//第10行需要修改为所使用的屏幕的芯片型号,此处为ssd1306型号。

//第16行两位数字为左上角开始的坐标位置,可根据内容进行调整;双引号中为需要显示的英文字符串。

从git上的库中包含很多示例文件,可显示当前时钟,一些小游戏,图形等等。

在所在的目录下通过
    
python3 example.py

命令即可运行相应的程序进行内容显示。


心得体会

Funpack此次活动刚开始其实有点犹豫,因为对电路及程序开发很有兴趣,但是因为之前单只接触过Arduino,但还是在朋友的鼓(song)励(yong)下加入了进来。可能更多的还是这块板子的设计、架构等和树莓派等很像,可以实现智能家居等的确很吸引我。

作为一名人力资源从业者,这次跨行跨业加入这次活动,的确需要很大的勇气,从最开始的一脸懵,到现在也可以进行一些命令行操作,对linux和STM32开发也有了一个基础的了解和认知,虽然还是有一些程序的原理其实不是特别清楚,但是过程中遇到的很多问题可以从互联网平台寻找答案,眼前的浓雾在逐渐散开,也可以和朋友一起进步,这种体验真的很好!

最后,真的感谢硬禾的这次活动,能够认识到更多兴趣相仿的朋友,也锻炼自己的“跨界”的能力,希望后面可以逐渐搭建出相要的智能家居中心,但是这可能需要更多的时间,时间不停在前行,学习的脚步也不能停下来。



更多精彩视频分享请移步至硬禾学堂BBS论坛(也欢迎大家在本论坛里展开交流): https://bbs.eetree.cn/forum.php?mod=forumdisplay&fid=53


往期精彩

1. Funpack第一期开始Fund Back了,成功的同学都奔走相告,分享喜悦吧!

2. Funpack第一期精彩之二:Argon带你用mqtt连OneNET,漂移菌带你跑Linux和驱屏幕

3. 看顶尖芯片公司工程师写总结报告(Funpack第一期精彩之三)


END


硬禾学堂

硬禾团队一直致力于给电子工程师和相关专业的同学,带来规范的核心技能课程,帮助大家在学习和工作的各个阶段,都能有效地提升自己的职业能力。

硬禾学堂

我们一起在电子领域探索前进

关注硬禾服务号,随时直达课堂


    

点击阅读原文参与第二期活动

电子森林 讲述电子工程师需要掌握的重要技能: PCB设计、FPGA应用、模拟信号链路、电源管理等等;不断刷新的行业新技术 - 树莓派、ESP32、Arduino等开源系统;随时代演进的热点应用 - 物联网、无人驾驶、人工智能....
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦