0 前言 从大学开始接触stm32以来,已经差不多有3年了。由于stm32入门相对简单,资料多,生态比较完善,再加上其芯片本身性能相对不错,功耗较低,成本也不算高(至少本科生拿来做些小作品成本并不高)。通过stm32做一些简单的小作品,参与一些竞赛,参与一些活动,也使得大学生活丰富了不少。包括2017电赛做滚球控制系统,还有大创做多足机器人,又或者是在开源飞控的基础上增加功能,或者单纯在OLED上播放个BadApple(/滑稽),都能体会到不少乐趣。相较于Ti、NXP等,在生态上,有标准库和HAL库支持使得st开发相对简单,加上CubeMx直接生成初始化代码,即使没接触过单片机也能较为容易的上手实现简单功能。micropython、MBED的支持也使stm32的受众面更加广阔,纵使优化可能并不是最好,或者说资源占用确实较大,但却让很多非专业人士也能按自己想法来实现功能。再有ST官方对开发人员的支持在国内也非常出色,不仅有专门的中文官网,资料齐全,使用较为普遍的型号也有官方的汉化手册。还有ST线下培训,线上活动,我也参与过一二,也感到非常友好。作为一名高校本科生,虽然能力较差,基础薄弱,但在ST的各类活动中并不会遭到歧视或者忽视,总之ST在生态上做的确实不错。" l( ~, e" ?2 d; ]( e6 u 下面放几张图片,都是用stm32做过的作品,有的是团队作品,有的是个人作品。( V- d3 H& U$ y8 ^ 滚球控制系统 0 l1 }) ^' c" ?4 ~) o六足机器人 农业机器人大赛作品 校园卡门禁系统 电动车倾倒断电装置 信号发生器 BadApple 然而今天我想介绍的并不是这些,而是最近利用空闲时间自己做的基于stm32f042的智能履带小车。4 l8 |6 m2 F% A, m8 U* l) f: @% q' O 1 开发板介绍 这次用的开发板为st官方的NUCLEO32-F042,F042是一款基于M0内核的MCU,flash容量不算大,适合做一些简单的小作品。$ v+ Y8 a/ [/ N+ u- i6 _& B" E 之所以选用这块主板,其实主要是去年参加st活动赠送了一块,在手里有闲置的板子就总想玩玩。至于该板子详细介绍,直接参考官网即可,不在献丑搬运了,直接放链接:http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-f042k6.html0 y# g2 C/ k" D& S) f2 E 至于这款产品的优势,个人感觉功耗相较于M3内核是较低的,而且在一些小作品中需要核心板并无法提供较大空间来安放,而这款产品在如此小的体积下还自带着编程器,只需要一根mcro usb线即可调试。由于支持MBED平台,想做简单的验证直接在线编程即可,想做优化也可以直接用keil编程、下载。/ I, [" a* t2 H; R& ~! L4 a5 } 这次在我的履带小车的项目中,我自己在keil中手动新建了HAL库的工程模板,具体步骤可以参考我的CSDN博客,如有错误的地方也非常欢迎大家来指正批判!" k1 L" d9 R5 l2 r$ g. o http://blog.csdn.net/u011619535/article/details/801591880 t4 B X* O, g; T" p 另外还有一篇是关于visual studio + visual GDB来新建工程并同时移植了下1.44寸spi屏的文章8 f" Y& ?# k8 z; w' ^- K http://blog.csdn.net/u011619535/article/details/82355239 . O7 L- i5 Z1 G 2 项目功能8 t. q: Y7 R/ P/ c- K, G3 O4 H) U % e' s0 N c# q" ?5 \ 目前项目还在进行过程中,由于最近忙于课程设计暂时暂停了该芯片的开发而替换为FPGA,课程设计结束后继续stm32的开发。 目前履带车实现的功能有:/ r! x6 C; ^, O! x! b1 O6 }2 S( L (1)PWM控制电机转速(驱动L298) (2)PWM输入捕获采集光栅编码器信号计算转速 (3)PID控制调节电机转速 (4)UART+DMA实现数据传输(传输小车控制指令), j7 X# N) K( h9 g y; O! d# F (5)移植DMP实现了MPU9250初始化,调用功能函数时但由于flash不够暂时屏蔽掉了 (6)移植APDS-9930实现接近检测与环境光检测 (7)连接esp8266实现局域网内的tcp控制,esp8266通过串口与stm32进行连接, C6 F3 Z! }: V; f& ^( j1 g, H) E * \* R% w4 }# f- g 后期准备开发的功能: (1)ADC采集,检测CO浓度 (2)DHT11采集温湿度信息' N" t' m2 y+ p. P* T. } (3)蜂鸣器控制 (4)根据flash情况决定MPU9250和1.44寸TFT的开发,可能考虑将这两部分放到esp8266中 另外,从网上随便找了个Qt的TCP源码,等小车功能完善之后再详细做下上位机,目前只是能控制下小车运动以及采集一下反馈的信息。 3 R- G7 k; g# ?- q3 S6 g 由于小车并没有参与什么活动,所以算是给自己开了个坑随缘开发,而且毕业生各种事情,因此进度比较缓慢。+ B- S3 j* L9 x ' u1 ~! H- ~9 L8 I- \0 w! x 3 引脚连接 由于外设大部分采用标准设备,只有测速模块以及蜂鸣器电路是自己根据原理图焊接的,因此没有画原理图,直接放张连接图以及CubeMx的引脚配置信息。) V% k- r6 j" j! ]3 Q 4 项目效果 5 小车源码 由于还在开发阶段,工程文件暂时不分享了。如果有感兴趣的欢迎大家支持我,若支持的人较多我会考虑将源码上传至GitHub。 在开发过程中在开发APDS-9930时发现资料较少,于是移植了arduino的源码。arduino是C++编程,因此我把C++相关的特性都改成C的版本。& g$ k# N" s t3 K APDS-9930 arduino的库源码可参考以下链接: http://github.com/Depau/APDS9930: A- U- m7 [8 v: P% I 移植采用了正点原子的软件IIC,移植后的APDS9930源码见附件。需要注意与自己的IIC要匹配。(附件不包括原子的IIC文件) |
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=622654&page=1#pid2474414% {) t% [; y" s7 Y