*阅读说明:排名不分先后,详细测评过程及源码资料等请戳原链接查看。
环境搭建和点灯。
结合官方例程,对APM32进行串口接收中断初始化。
RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。
1.先申请一个按键结构。2.初始化按键对象,绑定按键的GPIO电平读取接口read_button_pin() ,后一个参数设置有效触发电平。3.定义与注册按键事件。4.启动按键。5.设置一个5ms间隔的定时器循环调用后台处理函数。
使用极海APM32F411V Tiny开发板进行示例移植,其他 ARM Cortex M系列开发板和芯片移植方法类似。
Zorb Framework是一个轻量级的嵌入式框架,搭建目的是为在不能运行Linux的芯片上快速开发应用,不用反复造轮子。
这几天在极海半导体官网逛的时候看到了APM32F4xx_DAL_SDK相关东西比较好奇,所以研究了研究。APM32F4xx_DAL_Driver是APM32F4系列的类似STM32-HAL抽象层的库,国产APM32芯片从标准固件库终于到HAL库了。
APM32F411V Tiny Board 板载调试器,仅需在调试器这头USB Type-C接入到电脑USB即可,即可供电,又可以下载调试,还能当串口使用。
SPI1 和 SPI2 互联进行数据收发,其中 SPI1 作为 Master,SPI2 作为 Slave。
在某宝购买的一块 TFT LCD,2.4寸液晶屏,SPI串口,带字库。其型号为 ZJY240S10Z0TG11,显示屏驱动IC为 ST7789。
运行一个最简单的 lvgl 示例工程,却导致了 HardFault。
LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。
前面的章节移植 LVGL 成功,但是刷屏速度很慢,无论是 FreeRTOS 版本还是 Baremetal 版本,速度差不多。所以问题出在哪里呢?
上一篇文章 LVGL 提速,仅仅是在刷屏时逐个打点替换为刷数组,速度肉眼可见的提升了,但是刷屏速度还需要再提一提 -- SPI + DMA。
使用Timer9实现一个1ms周期的定时器,先配置一下系统时钟,开启外部高速晶振,PLL到120MHz。
原本想用硬件驱动的,结果和评测407时一样总是搞不定,官方的bsp_i2c也是用的模拟I2C,官网搜I2C相关文档也只能搜到模拟I2C与EEPROM通讯的,最后放弃改用软件模拟I2C。
外接了一块SSD1306驱动芯片的OLDE屏,用OLED屏来显示APM32F411V芯片自带的RTC时间,本来想用自带的IIC驱动来驱动oled,测试了一下,没有显示成功,索性就直接用模拟iiC实现吧,接的单片机PB6和PB7,查了数据手册,硬件iic也是这两个接口。
APM32F411这个单片机可以生成随机数,而且demo里自带,我这里就移植显示在OLED上。
完成点LED灯。
驱动TFT项目的一个前置部分,通过UART更新外置FLASH中的图片数据。
已经完UART更新外置FLASH中的图片数据,那么今天开始驱动TFT屏了。
APM32F411VET6的USART3,UART4,UART5在XX32F411VET6是没有的,保留了相应的地址空间。在APM32F411VET6中这部分地址空间被用作了USART3,UART4,UART5。在使用XX32f411的XX32CubeMX开发时,没有相关的外设配置选项,我们可以自己改HAL库,以支持USART3,UART4,UART5。
顺着linux下pyocd+cmake环境搭建并点灯+printf uart输出组建开发环境已经非常方便,下面说说APM32f411V特别的地方或者说需要在已有linux开发环境基础上再做什么即可搭建用于APM32F411V的开发环境。
这个测评贴就是来展示pyocd如何加载点灯固件到sram并从sram启动。
本来想移植nuttx这款RTOS的,但恰好近一个月以来RT-Thread玩得比较多,所以练手目标改成RT-Thread了。
充分利用APM32F411大sram的特性,在开发阶段尽可能避免烧写flash,从而加快开发验证速度和延长flash寿命。
移植了一下coremark,坛子里coremark移植比较多,移植步骤就简单说一说,重点在后面从sram运行coremark的性能数据比从flash执行的要差,是一件比较奇怪的事情。
UART输入输出是开发板开发及调试过程中不可缺少的过程,也是很多外设进行交互通讯的必须接口。
APM32F411V Tiny 的ADC功能是转换模拟信号为数字信号,这个是众多产品所用传感器的基础,如自动计量秤等,都是这样安排的。
APM32F411V 内存足够大,可以容纳核心很多中间件的使用,其中最常用的就是RTOS实时操作系统,这里选择rt-thread进行开发。
APM32F411V一个重要的功能是USB接口,USB栈固化进了硬件层,通过函数调用就可以简单使用,而且同时支持DEVICE和HOST两种模式。
在SHT20的基础上提升了精度,缩小了体积。同时通信命令增加了一位。
驱动方式就是SPI通信,所以打开CUBEMX生成SPI接口。
本程序主要针对SD卡2.0 HC2.0高容量卡协议进行说明。
前面我们保留我们的温湿度传感器读取方式,在移植了LVGL之后我们就可以通过其进行简单的数据显示了。
由于RT-Thread Studio中并没有支持APM32F411系列的芯片,所以另辟蹊径直接使用STM32F411芯片进行创建工程。
使用RT-Thread Studio来添加u8g2软件点亮OLED屏幕。
定时器主要是用到了他的计数功能,当然还有其他的输入捕获,互补输出等功能我们首先看看定时器的时钟树,可以更加清楚的了解到定时器的脉络。
APM32的开发板上是有两个对外串口可以使用的,串口一和串口2,通过板子上的跳线就可以实现串口介入DAP的选择。
点个灯和串口输出测试一下。
移植一下串口shell,方便命令控制。
研究了一下APM32F411的I2C接口功能。
研究一下APM32F411的ADC外设功能。
对 APM32F411V Tiny Board 的 IIC 代码进行测试,并尝试驱动 MPU6050 传感器。
对 APM32F411V Tiny Board 的 ADC 代码进行测试,并尝试驱动压力薄膜传感器。
对 APM32F411V Tiny Board 的 PWM 代码进行测试,并尝试驱动震动马达。
对 APM32F411V Tiny Board 的 IIC 代码进行测试,并尝试驱动 0.96 寸 IIC 协议的 OLED 蓝黄双色模块。
程序通过ADC(模数转换器)进行连续转换,采集模拟信号并通过USART串口输出结果。
SPI+DMA驱动WS2812,其实WS2812是一种常见的LED灯珠,通常用于制作RGB全彩LED矩阵。
按照步骤完成搭建后,将程序下载至开发板,可以看到两个LED按照编程内容愉快的闪烁了。
|