- 博客(23)
- 资源 (7)
- 收藏
- 关注
原创 MCU使用静态库.a文件
arm-none-eabi-gcc编译时,注意要使用和最终生成的bin档一样的编译选项,否则在运行时会出现问题。在MCU开发过程中,有些功能不需要其他人知道具体实现方式,无法提供源代码时,我们可以使用静态库的方式提供。
2023-05-10 09:31:27
871
原创 C#数组和结构体之间转换
在c#开发过程中,想要实现c语言中,数组和结构体之间任意转换,该方式在实现协议上特别有用1.c#结构体字节对齐使用[StructLayout(LayoutKind.Sequential, Pack = 1)]实现 [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct test { public UInt16 aa; public byte bb; public
2021-11-05 16:55:13
2825
原创 使用readfile读取HID input数据,阻塞无法返回
在调试读取HID input数据时,发现使用readfile一直阻塞无法返回,尝试使用异步读取,发现也无法进入到回调函数。使用bus hound查看发现,从机一直上报数据。 经过交叉验证,report 设置长度为0X20,而实际发送的只有4个字节。修改report长度为4时,就可以正常读取数据了。 bus hound可以正常读取数据,理论上来说应用软件也可以实现,暂时还没有找到好的方法,待后面找到根本解决方案再更新...
2021-11-05 13:59:12
1345
原创 Nordic-NRF无法连续输出log
基于Nordic NRF ble_app_hids_keyboard Demo注释掉 idle_state_handle()添加 NRF_LOG_FLUSH()
2021-08-13 14:48:09
501
原创 stm32 USB虚拟多个串口设备
参考https://blog.youkuaiyun.com/manshq163com/article/details/83184003问题1:两个串口无法同时发送数据;一个正常,一个乱码;解决:修改fifo大小问题2:两个串口同时打开才可以正常通信原因:usb缓冲区数据未被上位机读走时,缓冲区满后会溢出,导致无法hcdc->TxState未清除。目前trick的方法是直接获取上位机串口开关状态,如果关闭不发送数据。...
2020-11-19 11:29:08
3338
1
原创 vscode 调试stm32 IAP
stm32 IAP在工作使用比较多,基本上每个项目都会有这个功能。之前一直使用IAR进行开发,后来使用vscode,在stm32flash小于128k时,是可以正常使用的,但是超过128k就不行了,原因是在检查栈顶指针不通过。vscode使用arm-none-eabi-gcc进行编译,栈顶指针在stm32**.ld设置,默认设置为0x20020000;所以检查不通过所以将栈顶指针修改,小于128k。...
2020-11-04 14:58:55
549
2
原创 iptables数据转发/镜像
网口数据转发iptables -t nat -A PREROUTING -p udp --dport 12345 -i enp8s0 -j DNAT --to 192.168.0.4:12345pc2与pc1通过enp8s0网口连接,pc2将接收到的pc1的数据转发到pc3的指定端口。端口可以不指定。查看iptables 规则iptables -nL --line-number网口数据镜像2.把某个源IP的包镜像发到指定的IPiptables -t mangle -..
2020-10-20 15:44:25
3078
原创 linux内核驱动 poll+waitqueue
在操作IO设备时,读取设备状态或者数据时,如果采用轮询方式,会占用大量的CPU资源,这种方式肯定是不可取,所以需要在内核驱动支持异步通知方式,等到设备准备好,再通知应用程序,其他时间应用程序应当处于休眠状态,让出CPU。本篇介绍poll的使用方法。1)首先定义一个wait_queue_head_t,并对其进行初始化struct xxx_dev{ wait_queue_head_t irq_wq; struct mutex mutex; int flag;}struct
2020-06-03 18:40:25
721
原创 linux 异步IO,signal
为了使设备支持异步通知机制,驱动程序中涉及3项工作:1)支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID。不过此项工作已由内核完成,设备驱动无需处理2)支持F_SETFL命令处理,每当FASYNC标志改变时,驱动程序中的fasync()函数将得以执行。因此,驱动中应该事先fasync函数。3)在设备资源可获得时,调用kill_fasync()函数激发相应的信号。设备驱动中异步通知编程比较简单,主要用到一项数据结构和两个函数。数据结构是fasy
2020-06-03 09:57:50
280
原创 flask设置static为任意目录
# Flask实例的源码:class Flask(_PackageBoundObject): def __init__(self, import_name, # 指定应用的名字和工程目录,默认为__name__ static_path=None, # 是静态文件存放的路径,会赋值给static_url_path参数 ...
2020-04-29 17:00:16
5545
原创 LL库串口+DMA
由于工作中测试发现串口传输数据延时有点大,传输35个字节,115200,理论值应该在3ms左右,然而实际测试却有40ms,所以首先想到会不会是hal库执行效率低得原因,所以采用LL库,但是LL库的资料少之又少啊!自己做个记录。 使用cubemx可以直接生产LL库的代码(我的工程里是hal库和LL库混用的),LL库串口硬件初始化部分会自动生成,但是传输地址及DMA传输长度...
2020-04-22 18:10:07
6712
2
原创 flask
flask 路径app = Flask(__name__,template_folder='../xxxx',static_folder="../xxxx") #template_folder='../xxxx' 指 前端文件的目录 #static_folder="../xxxx" 指 静态文件的目录
2020-04-17 10:51:04
164
原创 tree.js添加dae模型
var container, stats, clock, controls; var camera, scene, renderer, mixer,collada_scene; init(); animate(); viewer.scene.scene.add(scene);//将3d模型scene添加到全局scene function init() { c...
2020-01-10 16:40:32
365
原创 vscode+stm32重定向printf函数
/*IAR编译器使用printf重定向*/int fputc(int ch,FILE *file){ while(__HAL_UART_GET_FLAG(bsp_log.port, UART_FLAG_TC) == 0); HAL_UART_Transmit(bsp_log.port, (uint8_t*)&ch,1,0xff); return ch;}/*vscode使...
2019-09-29 13:12:36
2588
6
原创 matplotlib动态绘制极坐标图
python绘制动态极坐标图:方法一:利用matplotlib.animation异步绘制import matplotlib.pyplot as pltimport numpy as npimport matplotlib.animation as anttli = [element for element in range(0, 330, 30)]fig = plt.figu...
2019-08-09 13:36:07
2219
原创 Python 邮件发送
# -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerclass mailhelper(): def __init__(self): self.mail_host = "smtp.qq.com" ...
2019-08-06 11:16:21
252
原创 VSCode+stm32cubemx调试 stm32
工欲善其事必先利其器,作为stm32开发程序员来说,一般情况都会使用keil或者IAR来进行编辑编译调试单片机设备,这两款IDE界面及代码智能补全不是很友好。作为宇宙最强IDE,visualstudio可以通过安装visualgdb来调试嵌入式设备,可以通过安装蕃茄助手来实现代码智能提示。st公司也推出了官方的IDE:stm32cubemxIDE。集成了TrueSTUDIO和STM32Cube...
2019-07-31 11:23:07
6775
3
原创 socket can 获取状态标志
在调试can总线时,可以通过ip -d link show可以查看can接口信息在使用socketcan进行编程时,需要知道can当前状态信息,可以通过获取系统错误码来识别一些can错误信息extern int errno;switch(errno){ case 100: printf( "network is down"); br...
2019-07-20 11:08:40
2423
原创 CubeMXIDE 汉化
CubemxIDE是将cubemx和true studio for stm32两个软件合并在一起,只要安装一个软件,就可以使用cubemx配置,使用IDE进行编辑和调试,不用很繁琐的将生成工程通过其他软件打开(keil或者IAR)。个人觉得keil和IAR编辑界面不是很友好,如果是用VS的话,工程移植比较繁琐,这IDE就可以解决这些问题。1.从官网下载安装cubemxIDE2.打开IDE...
2019-07-17 09:18:58
16255
4
原创 HAL SPI 主从模式通信
一般情况工作中使用SPI主模式比较多,也没什么难度,这篇文章主要说一下关于SPI从模式的相关配置。SPI初始化并没有什么其他不同,仅仅是将模式由主模式改为从模式:/* SPI2 init function */static void MX_SPI2_Init(void){ /* SPI2 parameter configuration*/ hspi2.Instance = ...
2019-05-30 11:34:57
2481
原创 spi DMA 复位后主机接收上一帧数据
由于硬件接口有限,需要用spi总线进行设备之间进行通信,我使用的HAL库,对于实现spi主从通信我将在另一篇文章里描述一下配置。该文章主要说明SPI复位问题。问题1:由于spi在进行通信时,有时会受到干扰,或者clock错位,之后便一直无法复位,此时需要软件进行复位。错误示例软件复位也比较简单就是重新初始化:/**********************************...
2019-05-30 10:30:00
1995
9
原创 stm32 IAP跳转后无法进去中断
基于stm32f405MCU上,利用SPI通信总线对从机进行IAP升级。问题描述:在主机给从机进行升级时,当boot loader接收完固件跳转到APP中,程序正常运行,串口数据正常打印,但是无法进入中断。重新启动后,正常进入中断,也就是从bootloader直接跳转过去正常得,所以定位原因在bootloader中。跳转之前也已经关闭全局中断(__disable_irq()),跳转后,app一...
2019-04-30 10:35:31
4489
2
转载 zigbee flash 操作
1、在工程选项设置里的PreprocessoràDefined symbols里添加了NV_INIT和,xNV_INIT (保存设备基本信息到非易失性存储器里)NV_RESTORE,xNV_RESTORE(不保存网络状态信息),(前面加x代表不保存);在这里要需要搞明白的是此处的网络状态信息是具体指哪一类的信息,是否与设备类型有关呢? REFLECTOR:是实现绑定功能,在ZDobject.
2016-02-19 16:21:44
1412
stm32f103vet6远程在线升级
2016-07-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅