![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
raoxu_1154492168
这个作者很懒,什么都没留下…
展开
-
单片机 fft参考文章
stm32原创 2023-06-25 16:12:54 · 89 阅读 · 0 评论 -
lwip-udp rawapi 使用详解
lwip-udp rawapi 使用详解udp简介udp是无连接的传输层协议,没有客户端和服务器的概念。rawapi使用详解udp_new,创建一个udp的控制块,记录的关键信息有,本地端口号,远程端口号,标志位flags,回调函数指针,本地ip,远程ipudp_bind,给udp的pcb控制块,设置本地ip, 本地端口号,这两个值非常重要,后面会说err_tudp_bind(s...原创 2020-02-18 17:07:14 · 1531 阅读 · 0 评论 -
lwip分析-udp数据包接收过程详解
接收链路层数据在以太网中断中接收到数据,最先调用ethernetif_input(&g_stFslNetif0);g_stFslNetif0是网卡接口结构体,数据处理过程为:调用low_level_input,从网卡中获取数据申请pbuf,将数据放进其中将数据交给 netif->input,处理( netif->input在初始化的时候赋值为ethernet_i...原创 2020-02-15 11:10:58 · 8381 阅读 · 2 评论 -
iic spi uart can 的基本知识
基本知识同步通信,异步通信同步通信:使用相同的时钟,没有起始位,停止位,效率高,主机提供时钟,是阻塞通信的方式。异步通信:不使用相同的时钟,发送方,发完一个字节数据,立马发送下一个字节。无阻塞通信方式。uart是异步通信spi,和iic是同步通信主机和从机spi总线上,只有一个主机。通过片选选中从机。iic上通过仲裁,是多主机方式,总线上都可以成为主机,都可以主动收发数据。...原创 2019-09-19 17:12:23 · 750 阅读 · 0 评论 -
关于内存对其的一点思考
背景这几天需要设计协议,所以我重新思考了一下,内存对其的问题。之前的理解,内存对其的问题我也遇到过,之前写应用的一小段代码的时候。对于收到的数据,进行了强制转换大概是以下的情况。伪代码如下typedef struct { short int head a; int data; ...} __attribute__((packed)) Uart_Data;我使用一个数组接收一串...原创 2019-08-16 11:10:54 · 108 阅读 · 0 评论 -
结构体声明位域的使用
背景知识结构体中的冒号表示位域。位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。实际应用typedef union{ char u; struct { unsigned char a :1; unsigned char b :1; unsi...原创 2019-06-19 16:29:28 · 1294 阅读 · 0 评论 -
lwip学习
Lwip的基本功能ARP以太网地址解析协议IP协议,支持ipv4和ipv6ICMP支持网络调试与维护IGMP用于网络组管理UDPTCP支持tcp拥塞设计,rtt时间估计,自动回复重传DHCP,动态主机配置协议AUTOIP动态分配ip地址PPP点对点协议DNS域名解析SNMP简单网络管理协议关系图lwip提供3种用户变成方式,raw/callback API,BSD-s...原创 2019-06-09 17:35:07 · 3432 阅读 · 0 评论 -
mpu mmu和cache的理解
mpu mmu和cache的理解单片机没有mmu,但是有mpu,都是内存管理单元。mmu可以看做是mpu的升级版,最重要的功能就是,实现虚拟内存,并提供内存访问权限cache提高访问效率,基本概念命中:需要读和写的变量在CACHE中,为命中透写:写进cache的同时,数据写进ram回写:数据正常读取都是通过cache。写进cache的内容,cpu会在合适的时间,同步进ram,这样永远是一致的。内存不一致当一块内存即是dma访问,也受cpu访问。使用回写的方式就可能会出现内存不一致。因为cac原创 2021-03-08 20:23:50 · 709 阅读 · 0 评论 -
EMWIN基础函数使用笔记
EMWIN基础函数使用WM_SetFocusOnNextChild接外部键盘时,聚焦到下一个按键GUI_EndDialog关闭对话框WM_SetFocus手动设置聚焦WM_DeleteWindow删除窗口WM_CreateWindow创建窗口WM_HideWindow隐藏窗口GUI_ALLOC_GetNumFreeBytes监控剩余内存使用情况GUI_ALLOC_GetNumUsedBytes监控使用了内存的情况子界面发送消息到父界面WM_SendMessageNoPar原创 2020-08-14 14:45:39 · 1292 阅读 · 0 评论 -
stm32分散加载机制的学习
什么是分散加载单片机和电脑一样具有,存储镜像和运行镜像。生成的bin文件下载到flash里面,然后根据连接脚本加载到指定的地方运行。通常情况下代码段都是放在rom中运行的,而数据段是放在ram中运行的。有时候为了提高效率或是其他目的,放在rom中的部分代码需要在ram中跑,下载的地址和运行的地址不同。这就是分散加载最常见的使用方式。不只是代码段,分散加载机制可以将内存变量,定位于不同物理地址上...原创 2019-10-19 17:33:14 · 3284 阅读 · 0 评论 -
stm32 adc使用
adc配置adc配置时有个地方让我觉得很困惑:ContinuousConvMode ,DiscontinuousConvMode这两个参数,乍一看只需要一个就好了,只要决定是不是连续转换就可以了。但实际上这两个参数是为了配置出更多的模式。经过查阅资料配置含义如下:ContinuousConvModeDiscontinuousConvMode转换模式DISABLE...原创 2019-09-24 22:05:46 · 918 阅读 · 0 评论 -
wireshark软件学习
wireshark软件简介wireshark软件界面主要包括3个部分数据包列表:软件抓到的所有的格式的数据包。单个数据包解析:鼠标选中其中一个数据包,软件会自动将数据解析出来。单个数据包原始数据:数据包对应的原始数据。单个数据包解析的内容有哪些:1. Frame(物理层):物理层的数据帧概况。2.Ethernet II(数据链路层):数据链路层以太网帧头部信息。(包含mac地址)...转载 2019-06-05 21:40:35 · 375 阅读 · 0 评论 -
stm32 调试can总线丢帧的问题
stm32 调试can总线丢帧的问题问题出现的背景需要写一个新的电机的驱动,使用can通讯,驱动比较简单,很快就写好了。自己单独测试一个电机的时候没有问题,正反转测什么的都很正常。本以为事情会很顺利,但是在测两个电机的时候,却发现很严重的问题,经常左电机不装或者是右电机不转。问题的解决步骤方案一: 1. 遇到这种问题通常都是加上一个延时,觉得可能就是发的太快了,时许上可能有问...原创 2018-07-18 14:10:15 · 15180 阅读 · 4 评论 -
stm32 HAL库分析之CAN
stm32 HAL库分析之CAN阻塞发送 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) 565 { ...原创 2018-07-29 22:24:20 · 11433 阅读 · 2 评论 -
stm32 hal库分析之uart
hal库 uart收发阻塞发送(非中断方式) 607 /** 608 * @brief Sends an amount of data in blocking mode. ...原创 2018-07-27 21:37:41 · 6768 阅读 · 0 评论 -
Uart之数据溢出
Uart之数据溢出问题背景:在项目现场实施项目的过程之中,出现了一个问题。stm32的控制器,莫名其妙会死机,不定时会出现这个问题。出现之后系统指示灯不在闪烁,网络死机,服务器再也ping不同,下位机的控制器。经过debug发现了抓到了这个死机的点。我发现并不是硬件错误,没有调用hart_fault这个中断服务函数。但是主线程却没有跑起来。意外发现原来程序是反复进入,串口的中断里面。检查错误标...原创 2018-11-25 17:54:38 · 5060 阅读 · 1 评论 -
stm32死机问题的处理
死机原理基本概念:连接寄存器LR:调动子程序时,自动存储下一次返回的地址,其实就是最近调用的那一次函数的地址。死机的过程:这里我们最需要关注的是第一步入栈:其中8个寄存器的顺序是其中出现异常时LR里面的值是固定的最后更新堆栈指针,我们根据最后使用的堆栈里面的内容,就可以知道出问题时的最后现场。死机定位思路简单来讲就是:找到死机时候的lr寄存器,然后根据lr寄存器的值,...原创 2018-11-28 10:48:21 · 17585 阅读 · 7 评论 -
stm32踩内存的问题
问题背景最近重构代码的时候发现一个踩内存的bug,当时没有时间将这个问题记录下来,这一次简单记录一下。问题描述经过打印发现代码中的数据会被莫名的改掉,全局搜索发现没有地方修改这个结构体。这个问题随机出现,确认代码被随机踩掉了数据。过程分析1.已经确认是内存被踩,首先看map文件,发现这个结构体附近是,另外一个线程的堆栈,有可能是堆栈越界了。经过分析发现,这个县城的堆栈剩余还是比较多的不会...原创 2019-01-01 22:32:03 · 703 阅读 · 0 评论 -
stm32基本知识的梳理
启动文件在单片机跑到mian函数,应用程序之前的代码就是启动文件的代码。这部分的代码需要定义中断向量表,链接脚本编译生成的各个静态库文件.a文件。需要使用链接脚本一起,才可以,链接(重新组织出)出一个,完整有序的,包含所有信息的bin文件。以下以stm32f407的链接脚本为例1.设置入口ENTRYstm32设置的入口即是,中断向量表里的系统复位向量。 32 /* Entry Poi...原创 2019-03-15 16:52:49 · 1752 阅读 · 0 评论 -
ubuntu16.04上搭建stm32f4开发环境
ubuntu16.04上搭建stm32f4开发环境搭建交叉编译环境stm32 属于arm cortex-m系列thumb指令集,使用的编译工具是arm-none-eabi,不同的内核的板子都是不一样的.在下面的地址可以下载到: https://launchpad.net/gcc-arm-embedded/+download 在电脑目录上解压,并在使用的到的bash配置文件下,设置相...原创 2018-04-22 18:47:05 · 5533 阅读 · 0 评论