自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (8)
  • 收藏
  • 关注

原创 NUCLEO-F411RE RT-Thread 体验 (10) - GCC环境 AT24CXX的使用

这里我放在了User目录下,里面所有的.c文件都会被编译进去。

2023-06-23 16:49:46 224

原创 NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用

驱动位于drv_pwm.c文件中,components层代码位于rt_drv_pwm.c中。

2023-06-22 15:13:57 985

原创 NUCLEO-F411RE RT-Thread 体验 (8) - GCC环境 TIM定时器的驱动移植以及基本使用

定时器驱动文件位于drv_hwtimer.c中,对应components层的文件位于rt-thread/components/drivers/hwtimer/hwtimer.c中。

2023-06-22 09:39:05 686

原创 NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用

NUCLEO-F411RE开发版的蓝色按键对应PC13管脚,我们将其配成外部中断的方式,并设置低电平触发。

2023-06-22 06:10:01 686

原创 NUCLEO-F411RE RT-Thread 体验 (6) - GCC环境 I2C驱动移植以及i2c-tool的编写

RT-Rhread这里用的是软件模拟i2c,stm32的驱动里并没有找到硬件i2c的驱动,但是在GD32里面却有硬件i2c的驱动,有兴趣的小伙伴可以根据gd32的代码写一份stm32硬件I2c的驱动。rtconfig.h里添加i2c的配置Makefile里添加i2c的编译这样修改后,输入list_device,会列出i2c1设备。

2023-06-21 14:54:09 562

原创 NUCLEO-F411RE RT-Thread 体验 (5) - GCC环境 串口的简单使用

使能BSP_USING_UART1后,drv_usart.c中会根据uart_config.h中关于UART1_CONFIG进行串口初始化,并注册到device设备中,但是关于gpio配置成usart1功能的初始化,要在HAL_UART_MspInit里添加。这个函数其实个WEAK函数,调用的地方在drv_usart.c中的stm32_configure函数中。usart1默认用的PA9 PA10,如果要修改的话,就修改下面的函数即可。*/*/

2023-06-21 05:55:46 107

原创 NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加

前面pin驱动移植后,我们使用rt_pin_mode() rt_pin_write() 控制gpio拉高拉低,从而控制LED灯的闪烁。整个pin的初始化流程在rt_hw_board_init里。rt_hw_pin_init中最重要的是rt_device_pin_register这个函数。rt_device_pin_register这个函数里_hw_pin.parent应该没啥用,最重要的是_hw_pin.ops = ops;

2023-06-21 05:26:22 292

原创 NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

在第一节里,我们用stm32cubemx将pa2 pa3管脚配置成usart2,用于跟st-link虚拟串口的打印用,那么我们先重定向printf函数,看这条通道是否行的通。在rt-thread线程里调用烧录进板卡后,打印如下:说明硬件连接与软件配置都没问题。

2023-06-20 06:28:00 267

原创 NUCLEO-F411RE RT-Thread 体验 (2) - GCC环境 Pin 驱动的移植

前面控制LED的函数,其实还是调用的hal的函数,RT-Thread分离了驱动层与应用层,驱动层往下对接hal库,往上对接pin组件。驱动层代码路径如图:pin组件代码位于。

2023-06-19 23:08:27 444

原创 NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

平时用的是iMac以及MacBook,所以烧录我用的是pyocd,将烧录命令添加到Makefile里,执行make的时候,就会自动烧录软件。因为entry往下执行,会调用到rtthread_startup()函数,这个函数里的rt_hw_board_init需要自己定义。因为这个rtconfig.h的配置比较全,所以也包含了finsh组件,而我们前面并没有将finsh编译进去。编译通过,烧录进去后,灯在闪烁,那么RT-Thread跑起来了吗?很遗憾,并没有,现在还是裸机程序再跑,继续修改。

2023-06-19 22:34:45 459

原创 Nucleo-F411RE (STM32F411)LL库体验 10 - RT-Thread nano finsh的移植

编译报错如下:在rtconfig.h添加#include “finsh_config.h”继续编译,继续报错:这里是个WEAK函数,我们得重新这个函数,在board.c里重新定义这个函数。采用轮询的方式。并注释之前函数那个错误。main函数调用继续编译,继续报错。在ld文件添加继续编译,无报错。烧录后出现msh。

2023-06-18 15:02:07 242

原创 Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植

这一节基于rt-thread nano版本,进行内核的移植,不包含任何组件。移植成功后,可创建任务,串口输出RT-Thread版本信息。

2023-06-18 13:35:56 317

原创 Nucleo-F411RE (STM32F411)LL库体验 8 - PWM的使用

LD2连接PA5,而PA5可以映射TIM2_CH1,配合TIM2,可以输出PWM。本片文章大量工作是添加了shell命令,可以通过pwm命令开关pwm以及设置pwm的频率,占空比等。

2023-06-17 21:39:30 710

原创 Nucleo-F411RE (STM32F411)LL库体验 7 - 低功耗(睡眠、待机)

F411有三种模式 Sleep mode、stop mode 、standby mode。其中SleepMode 、Stop Mode 可选择WFI 以及WFE,两者的区别在于,前者任何中断都能唤醒,后者只能是Wakeup Event才能唤醒。唤醒时接着进入睡眠处的代码继续执行。借助之前的letter shell,我们添加pwr命令,输入pwr --sleep 进入sleep mode,输入pwr --stop 进入stop mode。每次进入睡眠跟唤醒之前,灯会快速闪烁。

2023-06-17 11:49:08 656

原创 Nucleo-F411RE (STM32F411)LL库体验 6 - EXTI外部中断的使用

开发板蓝色按键连接PC13管脚,且断开时为高电平,闭合时低电平。我们将pc13设置为中断模式,低电平触发,当按键按下时,触发中断处理函数,我们就可以捕获按键动作了。

2023-06-17 06:20:29 761

原创 MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用

开发版的LED灯连接PA1脚,而PA1可以映射TIM2_CH2,所以我们用通用定时器2的TIM2_CH2输出PWM到PA1脚,通过更改PWM的占空比,来改变LED的亮度。

2023-06-17 05:44:42 687

原创 Nucleo-F411RE (STM32F411)LL库体验 5 - 通用定时器TIM2的使用

设定TIM2,计数周期为10KHZ,即计时1s需要10000次,通过shell命令动态修改reload值,来更改定时器的频率。假定设定TIM2 counter clock = 10K,那么TIM2 prescaler = (SystemCoreClock /10 KHz) - 1,代码中通过__LL_TIM_CALC_PSC(SystemCoreClock, 10000)来计算得到。假定 100ms进入一次中断,即freq=10HZ,那么tim2的autoreload的值通过下面的函数得到。

2023-06-16 06:48:03 532

原创 Nucleo-F411RE (STM32F411)LL库体验 4 -Letter Shell移植与调试

Nucleo-F411RE自带st-link,并支持虚拟串口的功能,根据原理图,st-link的rx tx接到了Nucleo-F411RE的PA2 PA3,所以我们要初始化PA2 PA3为串口功能,这样我们就可以直接用st-link抓取打印,而不用再接一个usb转串口的模块。

2023-06-16 05:24:42 717

原创 Nucleo-F411RE (STM32F411)LL库体验 3 - 滴嗒定时器的配置

LL库初始化时钟的时候调用了LL_Init1msTick(100000000)函数,这个函数其实就是初始化了系统的滴答定时器。LL_InitTick原型如下:load值 = sysclk/1000,即计时1ms需要120000个数。CTRL clksource = 1,不分频,systick的频率为120M。

2023-06-15 20:50:28 664

原创 MM32F3273G8P火龙果开发板MindSDK开发教程20 - freertos + letter shell 的移植

将systick设置为中断模式,load值为sysclk/1000,一秒一次溢出中断,为freertos提供时钟。与前一章节一样,在启动task之前调用User_Shell_Init即可。读数据还是用串口的中断。

2023-06-15 18:40:17 600

原创 Nucleo-F411RE (STM32F411)LL库体验 2 -sysclk的配置

Nucleo-F411RE开发版只有一个8M的晶振,看起来像是给st-link提供时钟的,所以猜测F411RE时钟的来源应该来自st-link(stm32F103c8t6)的mco输出。mco输出频率为8M。HSI频率为16M。

2023-06-15 06:58:41 472

原创 MM32F3273G8P火龙果开发板MindSDK开发教程20 - letter shell 的移植

犹如linux下的命令行,或者更像是uboot下的命令行,可以输入命令,执行相对应的函数。

2023-06-14 20:56:46 1149

原创 MM32F3273G8P火龙果开发板MindSDK开发教程19 - littlefs文件系统的移植

LittleFS 由ARM官方发布,ARM mbedOS的官方推荐文件系统,具有轻量级,掉电安全的特性。主要用在微控制器和flash上,特点如下:掉电恢复,在写入时即使复位或者掉电也可以恢复到上一个正确的状态。擦写均衡,有效延长flash的使用寿命。例如W25QXX系列的spi接口的flash,擦写次数大概在10万次,如果是操作flash比较频繁那么这10万次很快就会到达上限从而导致芯片废掉。有限的RAM/ROM,相对于FATFS节省ROM和RAM空间。

2023-06-14 20:32:25 678

原创 MM32F3273G8P火龙果开发板MindSDK开发教程18 -sfud库的移植

SFUD (Serial Flash Universal Driver) 串行 Flash 通用驱动库推荐查看官方文档:一款使用 JEDEC SFDP 标准的串行 (SPI) Flash 通用驱动库主控:MM32F3273G8P火龙果开发板spi flash : W25Q32使用SPI2。(PB12 PB13 PB14 PB15)在移植sfud之前,我们先初始化spi2,用读取函数,读取一下w25q32的manufacturer_id值,如果能正常读取,说明我们的设备没有问题,spi初始化也正常,然后

2023-06-14 13:15:11 1291

原创 Nucleo-F411RE (STM32F411)LL库体验 1 - 点亮LED

一如既往,还是macos + gcc + pyocd的开发环境。pyocd pack find stm32f411retx #命令查找支持包pyocd pack install stm32f411retx #安装支持包pyocd flash --erase auto --target STM32F411RETx --base-address 0x8000000 ./build/$(TARGET).bin #烧录命令,写在了Makefile中,make命令编译后直接烧录进板卡。

2023-06-14 06:48:13 684

原创 MM32F3273G8P火龙果开发板MindSDK开发教程17 -U8g2库的移植

/ 初始化 u8g2 结构体// 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态// 打开显示器/*字体模式选择*//*字体方向选择*//*字库选择*/while(1)do烧录后,可以看见u8g2官方的logo了。

2023-06-13 20:59:20 1194

原创 MM32F3273G8P火龙果开发板MindSDK开发教程16 - 获取msa311加速器的自由落体事件

类似手环检测老人跌倒的功能,当msa311模块自由落体运动时,可生成中断。该中断基于加速度数据与低g阈值的比较。通过将1写入位(0x17)“FREEFAL_INT_EN”来启用中断。有两种模式可用:单一模式和总和模式。在单一模式下,将每个轴的加速度与阈值进行比较。在求和模式中,将所有加速度的绝对值之和|acc_x|+|acc_y|+|cc_z|与阈值进行比较。模式由位(0x24)“FREEFAL_mode”选择。

2023-06-13 14:10:57 187

原创 MM32F3273G8P火龙果开发板MindSDK开发教程15 - 获取msa311加速器的方向改变事件

类似手机里横屏竖屏检测,当方向发生变化时,横屏竖屏自动切换。当msa311方向改变时,会产生中断,然后从寄存器Reg 0x0C(Orientation _Status) 中读取现在设备的方位。有这几种可能,

2023-06-13 13:03:06 244 1

原创 MM32F3273G8P火龙果开发板MindSDK开发教程13 - 获取msa311加速器的运动事件

msa311在运动时候,会产生一个中断,此时我们读一下09寄存器的02位,如果为1,那么我们可以断定msa311处在运动状态,但是当msa311处于静止的时候,却没有中断产生。而adxl345在静止的时候,也会在设定时间之内,产生中断,从来更好的判断运动与静止状态。

2023-06-13 10:46:41 547

原创 MM32F3273G8P火龙果开发板MindSDK开发教程14 - i2c master中断模式的使用

对比了GD32、N32之后,发现MM32的MindSDK操作I2C确实简单很多,跟stm32的库函数有的一拼。继续使用PC6 PC7 这一组I2C,外面接了一个AT24C02 ,实验中写入20个数据,然后读出来,看是否一致。

2023-06-11 17:37:09 151

原创 MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件

msa311可以识别单击、双击事件,类似手机上的点击返回,双击截屏功能。单击,双击都能产生中断事件。中断事件产生后,从对应的状态寄存器读取是双击还是单击。中断需要打开映射。单双击可设置阈值。

2023-06-11 15:01:58 721

原创 MM32F3273G8P火龙果开发板MindSDK开发教程11 -获取msa311加速器的xyz轴数据

使用i2c总线可以读取xyz轴的加速度可以监测单击双击事件可以监测运动与静止状态可以监测自由落体事件,可用来监测摔倒或跌落。可以监测旋转事件,类似手机旋转屏幕。这一节只获取xyz轴加速度,中断以及其他事件先不设置。msa311的初始化流程如下:设置工作模式使能Axis设置dataRate设置BandWidth设置Range。

2023-06-10 18:15:06 904

原创 MM32F3273G8P火龙果开发板MindSDK开发教程10 - 软件模拟I2c的使用

PC6 PC7模拟SCL SDAGPIO输出模式下最好设置为开漏输出。sda输入模式下设置为上拉输入。

2023-06-10 14:45:02 90

原创 MM32F3273G8P火龙果开发板MindSDK开发教程9 -i2c阻塞方式的使用

使用PC6 PC7。我在这路I2c上挂在了一颗MSA311的加速器模块,设置成功后,去读加速器模块的PARTID,看是否能够正常读写。i2c初始化函数时钟初始化放在了clock_init.c中。

2023-06-10 13:19:50 85

原创 MM32F3273G8P火龙果开发板MindSDK开发教程8 - MutilButton的移植

MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

2023-06-10 10:38:01 546

原创 MM32F3273G8P火龙果开发板MindSDK开发教程7 - 基本定时器的使用

MM32F3273G8P有2两高级定时器,TIM1/8,四个个通用定时器TIM3/4,TIM2/5,以及两个基本定时器TIM6/7。现在我们将TIM6设置为100ms一次触发中断,中断函数中翻转LED的状态,实现LED的闪烁功能。TIM6是挂在APB1上的外设,APB1的时钟为60M,但是APB1的Prescaler为2,所以TIM6的时钟为120M。假设TIM6的prescaler=1200-1,即120M/1200 = 100K的计数频率,即10us计数一次。

2023-06-10 10:19:10 137

原创 MM32F3273G8P火龙果开发板MindSDK开发教程6 - Gpio外部中断的使用

原理图可知,用户按键连接PA0常态高电平,按下后低电平,设置双边触发,中断触发读取值为0可知按下,中断触发读取值为1可知松开。配置GPIO上拉输入,代码如下:外部中断配置中断处理函数头文件定义实验现象按下打印press,松开打印release。工程下载连接

2023-06-09 23:37:23 84

原创 MM32F3273G8P火龙果开发板MindSDK开发教程5 - Gcc编译环境的配置

用了几天Keil后,实在用不习惯,只好回到macos系统中来搭建gcc的编译环境。但是百问网火龙果开发板自带的DAP-Link在pyocd中根本识别不到,所以烧录还需要重新购置一块DAP-Link,我手头用的是EEMaker的,还不错。

2023-06-09 23:20:04 904

原创 MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

Systick是ARM内核的一个外设,所以在不同芯片的代码上移植比较方便,他总共有4个寄存器,

2023-06-08 19:13:02 651 1

原创 MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置

一般流程为startup_mm32f3273g.s中调用system_mm32f3273g.c中的SystemInit函数完成系统时钟的初始,而system_mm32f3273g.c中函数是空的。原来MindSdk时钟初始化的流程放到了clock_init.c中。

2023-06-08 06:53:23 550

GCC Make N32G430C8L7 FreeRTOS 工程代码

一个gcc makefile 编译的freertos 移植工程,适用于N32G438C8L7-STB开发板。

2023-05-14

Stm32 IAP升级代码

Stm32 IAP升级代码 Makefile环境 包含BootLoader App 代码

2023-04-15

iar8.10.rar

IAR for 8051 V8.10

2021-09-10

EspNetWork.rar

android端链接阿里云程序,获取树莓派的数据,并通过云端控制树莓派设备。代码ui随便写的,希望不要介意。

2020-12-17

iotApp.tgz

树莓派 mqtt协议登录阿里云并上传温湿度以及光照数据,同时手机端app 可以控制树莓派上的继电器,控制灯等设备

2020-12-17

BlePro.zip

hc-08蓝牙透传模块android端app源码,搜索蓝牙,连接蓝牙,并控制stm32上led,蜂鸣器等,且能够解析stm32发送过来的温度,湿度,光照强度等数据。

2020-11-27

BuleToothControl.zip

Stm32f102zet6 蓝牙透传模块数据解析,其中包括am2320温湿度传感器,GY-30光照传感器,at24C02 eeprom,以及pwm控制灯的亮暗等

2020-11-27

Android Hal层代码.rar

Android Hal层代码模板以及与上篇驱动交互的逻辑代码。hal层代码模板可以套用。并带一个测试程序供调试使用。

2020-11-16

Linux I2C设备驱动案例

i2c设备驱动案例,里面有i2c收发函数,节点创建函数,数据解析函数,以及如何动态控制打印输出函数,只要稍加修改就能适用于大多数i2c设备

2020-11-12

8.1 android 串口编程

8.0以后,串口访问越来越麻烦,各种权限受限,把这两天遇到的麻烦Mark一下,希望同行看见后有所借鉴。 关于权限,我总结了下,主要有三点: 1、app 要有系统权限 在AndroidManifest.xml里加上 android:process=“system” android:sharedUserId=“android.uid.system” 不过这样的话,app就要放到源码里编译了。 2、 /dev/ttyS4要有读写权限 (你的串口不一定是这个ttyS4) ls -l /dev/ttyS4 如果没有读写权限,记得在init.rc里面添加 chmod 777 /dev/ttyS4 3、做完上面两步,本来想这会该有访问权限了吧,结果还是拒绝访问,一脸的懵逼。 后来想起来有可能是selinux搞得鬼,然后将selinux设为 permissive模式以后,终于可以通讯了。 不过每次adb shell输入setenforce 0 还是不爽, 我们在源码里访问权限加上。 可以参考 https://blog.csdn.net/huangyabin001/article/details/79290382 我这里具体的更改为 Rk3288/system/sepolicy/private/system_app.te 加上这么两句话 allow system_app serial_device:chr_file { open read write ioctl getattr }; allow system_app proc_stat:file { getattr }; 这样那些自己驱动里创建的设备节点也就可以访问了。 然后mmm sepolicy。 串口的操作用的是android-serialport-api ,只不过我的代码里将ndk-build改成了cmake,如果不会操作,一搜一大把。 开发环境 androidStudio ndk cmake

2018-12-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除