
单片机开发
文章平均质量分 60
love潇潇熊
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AT32F437制作Bootloader然后实现Http OTA升级
首先创建一个AT32F437的工程,然后发现调试工程配置这里的型号和创建工程选的型号不一致,手动更改一下,使用PW Link下载程序的话还要配置一下pyocd.exe的路径。项目使用的是AT32F437VMT7芯片,内部flash空间是4032K,用来做OTA升级完全够用,就没有使用外部FLASH,打开FAL分区功能。新建工程明明选的是AT32F437VMT7,新建完工程后芯片型号居然变了,只好手动改一下,如上图所示。然后发个OTA升级的命令,开始下载重启,新的程序就更新过去了。原创 2023-03-10 11:51:14 · 2280 阅读 · 5 评论 -
rt thread 使用freemodbus TCP记录
1.modbus tcp主机一般作为tcp客户端,从机作为tcp服务器。modbus tcp服务器的端口号默认是502,端口号定义在porttcp.c文件里。客户端连接成功事件在porttcp.c文件里的tcpserver_event_notify函数里。TCP服务器接收到的socket原始数据在porttcp.c文件里的tcpserver_event_notify函数里。查看方法如下:...原创 2021-11-16 13:46:01 · 1280 阅读 · 1 评论 -
LWIP socket通信设置发送和接收超时时间
在使用lwip协议栈做TCP客户端通信的时候发现,如果在发送的时候关闭TCP服务器的连接则在调用ret = send(mytcp_sock, out_str11, strlen(out_str11), 0);函数的时候会返回-1.如果在正常通信的时候切换服务器的wifi,而没有断开TCP服务器,在调用ret = send(mytcp_sock, out_str11, strlen(out_str11), 0);函数时会发生阻塞。没有数据返回。这样就无法检测网络连接是否断开,如果需要设置发送超时,原创 2021-10-25 15:07:54 · 3720 阅读 · 0 评论 -
TLE5012磁编码器使用记录
话不多说,硬件连接图 单片机SPI的MOSI和MISO脚连一起,加4.7K上拉电阻。软件使用SPI通信。#define BMQ_LZ_D 30//编码器轮子直径30mm//#define BMQ_pi 3.141592653 //π值#define BMQ_motor_L (BMQ_LZ_D * M_PI) //轮子的周长#define TLE_CSS...原创 2021-08-04 14:34:43 · 4009 阅读 · 0 评论 -
RT-Thread系统下使用LWIP协议栈,设置TCP发送超时的问题
1.使用RT-Thread Studio写TCP传输程序时用stm32f407+lan8720做TCP客户端,PC机做TCP服务器传输数据。发现:客户端和服务器正常连接时拔掉网线打印link down,可以检测到网线被拔掉了。运行过程中断开TCP服务器,或直接关闭TCP服务器也可以检测到。接收数据返回错误。但如果正常连接情况下直接断开TCP的WIFI、也就是把电脑的FIWI断开,则TCP客户端无法检测到,发送数据还一直提示成功。想要解决这个问题首先想到的是设置TCP发送超时时间,原创 2021-05-26 17:41:29 · 1984 阅读 · 0 评论 -
rt-thread studio软件使用math.h和stdlib.h里的函数报错问题
rt-thread studio软件里使用了atof()函数和fabs()函数总是报警告和错误。程序开头明明加了#include "math.h"#include "stdlib.h"而且报的错误让人看不懂右键打开math.h头文件,里面竟然只有这么一点程序,肯定不对了。stdlib.h里也是一样。检查了半天发现是要打开RT-Thread Settings里面的libc组件然后编译没有错误和警告了。...原创 2021-05-13 14:18:52 · 1180 阅读 · 2 评论 -
rt-thread studio中添加lan8720网络驱动
1.使用rt-thread studio新建项目,选择好主控芯片和打印串口。新建工程第一步当然是关心芯片各个总线的系统失踪啦,打开driver文件下的drv_clk.c文件修改#define DBG_LVL DBG_INFO为#define DBG_LVL DBG_LOG打印出系统时钟编译、下载通过串口即可看到当前的系统时钟,可以看到rt thread系统已经把系统时钟配置好了,我们用系统默认就可以。如果需要修改更改drv_clk.c文件里的system_clock_config()原创 2021-05-05 17:12:48 · 3103 阅读 · 6 评论 -
RT Thread系统下W5500芯片TCP通信,连续接收两条数据卡死问题
rt thread 系统下使用W5500做TCP通信,使用wiz软件包。测试发现如果在服务器上连续发送两条数据,那么程序就始终卡在了TCP数据接收线程中了,CPU占用率瞬间变成100%了。程序里所有比TCP接收线程优先级高的可以正常运行,比TCP接收线程低的都卡死了。如果你的tshell线程的优先级比TCP接收任务的优先级低的话,那么shell也用不了了,程序好像是死机了。为了调试方便我把tshell的优先级改为17,比TCP接收的优先级高一点。卡在这里差不多1分钟的时间后,系统原创 2021-03-11 20:29:27 · 3377 阅读 · 4 评论 -
Warning: The core is locked up的解决办法
rt thread studio V2.0版本编译器使用正点原子的DAP无线调试器进入调试模式后,再用J link下载程序就提示Warning: The core is locked up从菜单 SEGGER->JLink Arm V4.08l->;Processor Specific Utilities->J-Link STM32 Unlock ,运行一下就行了...原创 2021-02-22 09:04:27 · 4067 阅读 · 0 评论 -
rt thread studio使用QBOOT和片外flash实现OTA升级
我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系PB3-->SPI3_CLKPB4-->SPI3_MISOPB5-->SPI3_MOSIPE1-->SPI3_CSS第一步使用rt thread studio新建一个bootloader的工程,我这里使用的是stm32f407vgt6的芯片使能SPI驱动和SFUD驱动打开board.h文件,取消#define BSP_USING_SPI3的注释然后在stm原创 2021-02-03 13:29:52 · 6060 阅读 · 6 评论 -
C语言宏定义运算式计算错误的问题
RT-Thread Studio编译器里使用宏定义计算如下公式按照正常的数学运算关系,算出来的结果是453.59如果不加括号算出来的值完全不对,结果是 -1050360954.1510059952把计算过程全都加上括号后计算正确由此可见编译器是将宏定义的数字一层一层替换而已,按照正常的数学运算是没问题,但编译以后的值却不对,还是要把计算过程加上括号。...原创 2021-01-26 13:11:44 · 1496 阅读 · 1 评论 -
RT -Thread Studio开发环境下使用freemodbus驱动
双击RT -Thread Settings在软件包里搜索modbus,然后添加freemodbus软件包到工程右键详细配置硬件连接PE0接485芯片的RE脚使用单片机的uart2,作为modbus的主机,波特率115200保存一下将配置更新到工程中打开board.h文件添加#define BSP_USING_UART2然后编译下载在shell里输入mb_master_samlpe连接一个usb转485的模块打开串口,看到已经有数据了。freem原创 2021-01-22 19:01:38 · 969 阅读 · 2 评论 -
RT -Thread Studio开发环境下使用I2C驱动SHT30
双击RT -Thread Settings,打开软件模拟I2C然后添加上sht3x软件包编译一下,将软件包添加到工程中然后打开board.c文件打开#define BSP_USING_I2C1的定义,并将I2C的引脚填写完整我的I2C_SCL是单片机的PD3,I2C_SDA是单片机的PD0然后编译下载shell命令中输入sht3x输入sht3x probe i2c1返回sht3x probed, addr:0x44,说明已经探测到sht30传感器了输入sh原创 2021-01-22 16:55:24 · 808 阅读 · 0 评论 -
RT -Thread Studio开发环境下使用PWM设备驱动
双击RT -Thread Settings,使用PWM设备驱动程序打钩我这里使用的是STM32F407VGT6,PWM接到PD12、PD13、PD14、PD15也就是TIME4的4个通道所以在drv_pwm.c文件中添加#define BSP_USING_PWM4的宏定义...原创 2021-01-22 12:37:42 · 1247 阅读 · 2 评论 -
rt thread系统下添加wiznet软件包后,不插网线CPU利用率100%问题
rt thread系统下添加wiznet软件包后如果不插网线的话其他任务运行很卡,使用ps命令发现优先级低的任务很多都超时了rt thread线程错误码添加了一个可以查看CPU利用率的软件包CPU_usage查看CPU的利用率,启动一会后利用率就是100%但是插上网线后CPU利用率马上就降下来了,其他任务也可以正常运行了那问题肯定出在了W5500网卡驱动这块了尝试了很久发现如果没有插上网线的时候,系统不停的在执行DHCP这块就是wiz.c文件里的static void原创 2021-01-20 10:17:22 · 691 阅读 · 0 评论 -
RT -Thread Studio开发环境下使用CAN设备驱动
双击RT -Thread Settings,使用CAN设备驱动程序打钩编译一下更新设备驱动到当期项目然后在stm32f4xx_hal_conf.h文件中打开对CAN的支持,也就是取消掉 HAL_CAN_MODULE_ENABLED这个宏定义的注释然后使用Cube MX配置一下CAN的引脚,然后复制生成的引脚初始化代码。也就是void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)这个函数粘贴到board.c文件中然后在a原创 2021-01-19 09:51:23 · 6407 阅读 · 4 评论 -
RT -Thread Studio开发环境下使用W5500做TCP客户端
首先是具备W5500芯片的驱动,参考上一篇文章RT -Thread Studio开发环境下驱动W5500网络芯片https://blog.youkuaiyun.com/qq_25186745/article/details/112647919在这篇文章的基础上来继续写TCP客户端的程序在applications文件下新建my_tcp.c文件粘贴以下代码#include <rtthread.h>#include <sys/socket.h> /* 使用BSD socket原创 2021-01-15 11:24:32 · 2183 阅读 · 1 评论 -
RT -Thread Studio开发环境下驱动W5500网络芯片
开发环境RT -Thread Studio V2.0.0芯片STM32F407VGT6网络芯片W5500硬件连接第一步,打开SPI设备驱动框架双击RT -Thread Settings然后在打开devices文件下的board.h文件,打开#define BSP_USING_SPI2的定义,我这里使用的是SPI2然后在stm32f4xx_hal_conf.h文件中打开对 SPI 的支持,也就是取消掉 HAL_SPI_MODULE_ENABLED 这个宏定义原创 2021-01-15 10:44:50 · 3503 阅读 · 8 评论 -
RT-Thread Studio下打印系统时钟
使用RT-Thread Studio新建项目是会有提示,工程使用的是芯片内部HSI时钟,如需修改,请完善drv_clk.c新建项目后打开drv_clk.c中有打印各个总线的系统时钟的函数,也有INIT_BOARD_EXPORT初始化,但是程序下载后却没有打印出系统时钟信息。在drv_clk.c文件的开头有定义#define DBG_TAG "board"#define DBG_LVL DBG_INFO将#define DBG_LVL DBG_INFO修改为#define DBG原创 2021-01-14 13:43:31 · 1004 阅读 · 0 评论 -
altium designer 18 画原理图时按空格键无法旋转元器件问题
解决办法取消始终拖拽,确定即可。原创 2021-01-05 09:46:01 · 7453 阅读 · 8 评论 -
STM8L151硬件IIC从机通信频率低的问题
最近使用STM8L151G6U6做IIC从机使用,STM32F103做主机读取从机数据,发现主机读取数据的SCL时钟只要高于16KHz读取到的数据就出错,使用逻辑分析仪测试发现IIC通信的第一个地址位是有应答信号的,到第二个字节就没有应答了,只要降低IIC主机的SCL频率就没有问题,查看STM8L系列的手册,IIC最高通信频率支持到400KHz,这差距有点大,肯定是哪里有问题了。找了很多IIC的例子都是使用库函数写的,基本都差不多,IIC初始化也很简单,问题可能出在中断上。尝试直接读写IIC寄存器,原创 2020-12-29 15:59:31 · 1064 阅读 · 0 评论 -
stm32f407单片机rt thread 片外spi flash OTA升级配置示例
参考地址https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/第一步,生成BootLoader。Bootloader 在线获取地址: http://iot.rt-thread.com1.注册账号、新建产品。点击固件升级、然后是生成BootLoader。2.根据自己板子配置情况填写硬件信息。我的板子上是用的STM32F407VGT6,ROM是1M,RAM是192K原创 2020-09-28 15:09:11 · 3632 阅读 · 1 评论 -
LWIP协议栈[I/drv.emac] RxCpltCallback err = -3错误解决办法
RT-Thread系统下添加完LWIP协议栈,跑了个TCP的客户端,运行上一段时间就会报[I/drv.emac] RxCpltCallback err = -3的错误,但是程序还能正常运行,TCP收发数据也都正常更改rtconfig.h文件里的RT_LWIP_TCPTHREAD_MBOX_SIZE和RT_LWIP_ETHTHREAD_MBOX_SIZE的大小...原创 2020-08-11 20:35:41 · 1198 阅读 · 0 评论 -
TCP发送CJSON字符串示例代码
void mytcp_send_heartbeat(void){ int ret; char *out_str11; char ipsbuf[20]; cJSON * root11 = cJSON_CreateObject(); cJSON * item11 = cJSON_CreateObject(); cJSON_AddItemToObject(root11, "cmd", cJSON_CreateString("heartbeat"));//根节...原创 2020-08-04 12:55:04 · 1535 阅读 · 0 评论 -
LWIP协议socket通信设置发送接收超时等待时间
函数名setsockopt使用方法先设置好等待时间然后等待接收。如果等待超时bytes_received返回-1原创 2020-06-10 09:18:04 · 3020 阅读 · 1 评论 -
stm32f407移值rt_thread和lwip协议,在dhcp成功后查看获取到的IP地址
stm32f407移值rt_thread加lwip协议,DHCP获取IP地址成功后想在程序中使用获取到的IP地址找了很久没有找到相关文档,串口调试输入ifconfig倒是可以看到IP地址,具体在程序中哪个函数获取到的IP地址却找不到。解决办法1.需要先在LWIP协议栈中打开调试信息,先在rtconcig.h文件里添加#define RT_LWIP_DEBUG宏定义2.在LWIP的lwpopts.h里面添加两个调试的宏定义3.编译下载,会发现输出了很多调试信息,如图最后一条是绑原创 2020-06-05 15:43:37 · 2818 阅读 · 5 评论 -
STM32F407和DP83848芯片RMII模式硬件电路图参考
分享一下STM32F407和DP83848芯片RMII模式硬件电路图电路原理图如上图所示,其中DP83848芯片的40脚是RMII_CRS_DV引脚,但我看到网上有好多原理图是把RMII_CRS_DV接到了DP83848芯片的39脚上,查了下芯片手册发现39脚是模式选择引脚,40脚才是CRS_DV引脚啊。DP83848的39脚应该是用来选择MAC接口模式的。后来测试了半天发现RMII_CRS_DV引脚接39脚或者接40脚初始化都能成功,并且都能ping通,建立TCP连接后原创 2020-06-05 09:44:33 · 16014 阅读 · 6 评论 -
STM32F407单片机ADC采样定时器触发事件分布
原创 2020-05-15 16:58:46 · 1152 阅读 · 0 评论 -
STM32F407单片机DMA通道映射关系图
原创 2020-05-15 16:52:35 · 3289 阅读 · 1 评论 -
STM32F103移值RT-Thread Nano添加控制台与 FinSH标准库程序源码
STM32F103移值RT-Thread Nano添加控制台与 FinSH标准库程序源码RT-Thread官方提供的是HAL库的源码,和标准库函数还是有一定区别的,这里我做好了好了标准库下的移值,供有需要的人参考。#include "sys.h"#include "usart.h"#include "rtthread.h"#define rt_ringbuffer_sp...原创 2020-05-06 12:53:28 · 1279 阅读 · 1 评论 -
STM32F407芯片RT Thread系统下添加PWM驱动
正点原子F407开发板上PWM用的是TIM2_CH4,我的板子上用的是TIM3_CH1。需要修改的地方还是挺多的,经过一番摸索总算是调通了,这里记录一下供大家参考。1.首先当然是修改Kconfig文件了。参考正点原子的BSP把里面的TIM2_CH4改成TIM3_CH1。然后打开menuconfigHardware Drivers Config-->On-chip Pe...原创 2020-05-04 17:04:33 · 1069 阅读 · 0 评论 -
altium designer原理图更新PCB时弹出Do you want to try and match the remaining camponents using their designat
altium designer在更改了原理图后重新更新PCB提示Do you want to try and match the remaining camponents using their designators?并且在PCB中重复添加了部分元器件。解决办法:切换到 PCB 文件,点击菜单"Project => Component Links".工程 =>器件连结在...原创 2020-04-27 17:07:03 · 8561 阅读 · 0 评论 -
STM32F407芯片RT Thread系统下移值LWIP协议,采用DP83848的PHY芯片
首先需要一个能跑起来的基于STM32F407的RT Thread系统,具体移值过程参考https://blog.youkuaiyun.com/qq_25186745/article/details/103808138这篇文章写得是基于STM32F103的,F407和这个大同小异,需要注意的地方就是RAM大小设置,参考https://blog.youkuaiyun.com/qq_25186745/article/d...原创 2020-04-11 16:14:19 · 2887 阅读 · 2 评论 -
STM32F407移值RT Thread不启动问题
今天使用STM32F407VGT6移值RT Thread操作系统,参考之前写的BSP制作文档https://blog.youkuaiyun.com/qq_25186745/article/details/103808138移值完成后串口无输出,检查移值中的各种操作都没找到问题。下载了正点原子的BSP程序启动成功,检查移值中用到的各个文件发现board.h和link.sct这两个文件里定义的RAM空间和...原创 2020-04-10 16:29:52 · 1006 阅读 · 1 评论 -
RT Thread系统下添加SHT20驱动
制作完自己板子的BSP后使用scons --dist命令生成独立的工程,复制一份出来作为新的工程。我的上一篇文章有讲怎么生成自己的BSP,地址在这里https://blog.youkuaiyun.com/qq_25186745/article/details/103808138SHT20时IIC总线驱动,所以先要添加IIC驱动到menuconfig目录中。先打开复制好的工程目录,打开Kconfig...原创 2020-01-03 18:34:46 · 881 阅读 · 0 评论 -
RT Thread教你如何根据自己的板子制作BSP
首先当然是要准备RT Thread源码啦,最新版本是4.0.3,下载地址是https://gitee.com/rtthread/rt-thread.git制作BSP分5个步骤复制通用模板 使用 CubeMX 工具配置工程 修改 BSP 中的 Kconfig 文件 修改构建工程相关文件 重新生成工程下载完成后解压、打开、找到bsp\stm32\libraries,这是制作自己bsp...原创 2020-01-02 19:00:32 · 6330 阅读 · 3 评论 -
STM32F103的HAL库下,配置内部时钟到64MHz
void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStr...原创 2020-01-02 10:37:36 · 2241 阅读 · 0 评论 -
warning: #223-D: function "atoi" declared implicitly
解决warning: #223-D: function "atoi" declared implicitly问题,atoi函数需要添加头文件#include "stdlib.h",而不是#include "math.h"。原创 2019-11-25 12:19:33 · 3401 阅读 · 0 评论 -
stm32f103的下载口作为GPIO口配置
stm32f103的下载口作为GPIO口配置需要加上这句,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);但加上这句后,jlink就不能下载程序了。可以先点击下载然后立马复位单片机是可以下载的,或者在GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);这句前面加上几秒钟的延时,这...原创 2019-11-25 12:10:56 · 695 阅读 · 0 评论 -
UIP协议栈UDP数据发送的问题
调试UIP协议栈中UDP通信的时候发现UDP往外发送数据时每次上电的第一次总是发不出去,到第二次就好了。调试时发现第一次发送UDP包时发的是广播地址,mac地址是FF FF FF FF FF FF第二次才是目的端的mac地址。猜想可能第一次发送UDP包时接收端如果存在会发送应答信号,以获取服务器的mac地址。然后在程序启动时假发送一次,以获取服务器的mac地址,到真正发送数据时第一次就可成功发送。原创 2017-01-01 16:44:39 · 1031 阅读 · 0 评论