自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (2)
  • 收藏
  • 关注

原创 STM32H7系列MPU与CACHE以及RAM

启用cache很简单,就是这两句,分别打开I-Cache和D-Cache,但是如果只使用这两句,再操作DMA和FLASH时就很有可能遇到问题,后面会具体说明。

2023-09-28 15:00:48 948

原创 boot跳入APP,APP使用RTX5,导致程序卡死无法进入main函数的问题

在这个文件里面定义宏USER_VECT_TAB_ADDRESS,然后修改VECT_TAB_BASE_ADDRESS 和 VECT_TAB_OFFSET宏的值为自己想要的值即可,然后在这开启总中断,就解决RTX5内核初始化第一次调用出错的问题了。当去掉boot后第一次会运行else的代码程序正常,加上boot后,当app代码量比较少的时候第一次内核初始化虽然会报错,但是程序还可以跑起来,当程序量比较大的时候,app就跑不起来了。之前有问题的写法就是在main函数的开头开启总中断和修改中断向量表。

2023-06-02 14:58:02 525

原创 linux只W25Q256驱动,使用m25p80,支持w25q系列nor flash

(1)echo “abcdefg” > /dev/mtd0 向mtd0写入数据。(2)cat /dev/mtd0 //读取mtd0数据,是乱码。将LCD中的SPI引脚注释掉。(3)有文件系统的操作。1.内核编译选项增加。

2022-12-12 14:08:04 1385 1

原创 STM32 EventRecorder printf不打印输出在调试窗口的问题解决

发现经过上述的操作后,进入调试界面,并没有把输出信息打印到窗口上,网上查找虽然也发现有人和我遇到一样的问题,但是都没有得到解决。找到EventRecorder对应重写的fputc函数,发现上面的宏定义导致部分程序是置灰的,也就是没有编译,才找到原因,是需要增加宏定义来打开对应的功能。也可以自己移植源码到工程里面,添加好后,工程中会多出几个文件,如下图所示,我这是自己移植的源码到工程中的,没有使用keil添加。把这个宏定义增加到RTE_Components.h中即可,就解决了没有输出的问题。

2022-09-23 14:43:23 995

原创 STM32H7 SPI+DMA只发送一次,然后一直报busy的问题

首先我尝试的同时配置发送DMA和接收DMA,还是一直报busy,并不能解决问题;我又尝试调用前使用HAL_SPI_Abort函数,发现确实不报busy的问题了,但是如果连续执行DMA发送函数就会出现DMA发送不完数据的问题。网上看了很多讲SPI+DMA问题的帖子,有说必须发送DMA和接收DMA必须同时配置的,有的说DMA发送前需要手动调用HAL_SPI_Abort函数的。最后发现,并不需要同时配置发送和接收DMA,只需要同时打开DMA中断和SPI全局中断就可以了,如下图所示。

2022-09-08 13:57:37 3564

原创 关于STM32H7的16位ADC准确度测试以及使用中的问题

STM32H7 ADC使用问题

2022-06-08 16:40:49 6770

原创 STM32H7 ADC偏移校准以及线性度校准

一、问题之前编写ADC初始化都只是增加了偏移校准,无论是官方例程还是正点原子的例程都是只使用了偏移校准,但是在使用STM32H7芯片的时候发现个别的板子会出现线性度极差的情况。二、解决1.在初始化程序中增加线性度校准的功能,这是HAL库有提供的,就一行程序非常简单。HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);2.发现这个校准函数返回超时的错误,经查找发

2022-05-05 11:36:10 3778 2

原创 STM32使用RTOS BootLoader跳转app进入异常中断问题

一、问题描述在boot中不使用RTOS,跳转到APP中,APP可以正常运行。但是boot中使用RTOS跳转到APP中,程序配置完时钟后就会进入MemManage_Handler错误中断。二、解决方法1.在跳转APP前加__set_CONTROL(0);就不会出错了。2.如果出现hardfault,或者调试看到程序跳到汇编程序的B指令上,可以查一下是否在boot中用到的中断没有关闭。三、原因分析1.加__set_CONTROL(0);的原因是使用操作系统后系统内核会使用PSP模式,跳转

2022-02-18 16:49:33 3850 2

原创 QT队列的使用(QQueue)

头文件#include<QQueue>/*定义一个队列 <>中的类型也可以是自己定义的结构体烈性*/QQueue<uint8_t> queue; /*入队列*/queue.enqueue(128); /*出队列*/uint8_t num = queue.dequeue();      /*队列判空,返回boo类型*/queue.isEmpty(); /*队列元素个数,返回队列中还有多少..

2022-01-27 15:36:28 10756

原创 STM32H7A3 ADC+DMA使用问题

解决STM32H7A3使用过程中遇到的一些奇怪的问题,并提供参考

2021-12-24 16:36:02 1856 1

原创 STM32H7系列FLASH出现HardFault的问题

一、问题描述在使用STM32内部FLASH时,发现有一次在读FLASH内容时直接就进入了HardFault,因为读内部FLASH是直接操作的内存,很简单的一句话,怎么也想不通是什么原因导致的。 然后调试模式下,用Keil直接看存储器的值,发现不是全A就是?号,这就确定应该是FLASH出了问题,然后擦除出问题的扇区就发现读取不会在进HardFault的。 通过读STM32H7的手册发现,H7系列和其他系列的FLASH不同,增加了ECC校验的功能,同时有状...

2021-10-11 15:45:24 2560 3

原创 STM32H7 PVD断电的使用

1.遇到的问题我使用的是STM32H747,在初始化后发现断电后并没有进入中断。最后查找到因为STM32H747是双核CPU,在HAL库源码中,有双核的宏定义将一些配置给屏蔽了,因为我只用到了单核,就把源码中的宏取消掉了,然后就可以正常进入中断了。使用不是双核的就不需要更改了。2.下面是PVD的程序void PVD_Init(void){ PWR_PVDTypeDef sConfigPVD = {0}; sConfigPVD.PVDLevel = PWR_PVDLEVEL_6...

2021-10-11 15:28:57 833 1

原创 关于STM32 HAL库 串口DMA发送

问题1:在使用DMA+UART发送时,在死循环中发送DMA发现只发送一次就不发送了解决方法:这里必须开启DMA中断和UART全局中断,开启后就可以一直发送了。问题2:死循环发送,发现通过判断DMA发送完成标志,数据并没有发送完成就开始发送。解决方法:1.添加延时函数,但是这样显然不是最佳的解决方法。 2.通过判断串口发送完成标志位,可以实现。程序如下所示。HAL_UART_Transmit_DMA(&huart4,send,21);wh...

2021-02-01 16:34:45 2630 1

转载 NFS下载文件报错:Loading: *** ERROR: File lookup fail

# Number of servers to start upRPCNFSDCOUNT="-V 2 8"# Runtime priority of server (see nice(1))RPCNFSDPRIORITY=0# Options for rpc.mountd.# If you have a port-based firewall, you might want to set up# a fixed port here using the --port option. For m.

2021-01-31 21:21:18 398

原创 关于arm板linux与windows复制文件,文件名乱码的问题

一、问题描述发现linux拷贝出来的文件到windows,文件中的内容是正常的但是文件名是乱码。因为文件的内容强制使用了UTF-8,但是文件名使用的是系统编码导致windows与linux互相导入导出文件时,文件名乱码。二、解决方法网上给出的解决方案无非就两种:1.使用convmv;2使用iconv。这两个我的arm板linux并没有这两条命令。所以就重新编译内核,从内核解决这个问题。1.<*>Simplified Chinese charset (CP936, G.

2020-12-31 15:43:58 522

原创 Linux Makefile基本使用

一、Makefile基本使用我们要编译main.c input.c output.c,需要使用gcc命令gcc -c main.cgcc -c input.cgcc -c output.cgcc main.o input.o calcu.o -o main然后才可以./main运行。【-c】是编译成.o文件;【-o】是编译成可执行文件。我们可以使用Makefile文件来直接执行这些命令main: main.o input.o output.o

2020-12-20 22:46:30 870

原创 Linux vi编辑器使用

一.命令行模式和编辑模式的切换vi打开文本后,是命令行模式。1.从命令行模式切换进入编辑模式,按【i】【a】【o】【i】进入编辑模式,并从当前光标位置开始输入。【a】进入编辑模式,并从当前光标的下一个位置开始输入。【o】进入编辑模式,并另起一行从行首开始输入。注意:编辑模式下不能进行删除操作,需要进入命令行模式。2.删除操作在编辑模式下按【ESC】进入命令行模式。【x】删除光标后面的一个字符。【X】删除光标前面的一个字符。【dd】删除光标所在行。3.退出、保存需要按ESC先进入命令

2020-12-19 21:16:24 554 1

原创 AM335X linux4.19 设置静态IP

1.修改80-container-host0.network文件文件在/lib/systemd/network/80-container-host0.network[Match] Virtualization=

2020-12-09 19:29:38 450

转载 Linux4.19内核使用 NETTLINK bind绑定失败

在linux4.19的内核使用NETTLINK 时发现总是绑定失败,但是在linux2.6的内核使用时不会出现这种情况。static void * usb_dev_plug_check(void *arg){ int ret = 0; fd_set rset; int nread = 0; struct timeval select_timeout; pthread_set_name("usb_plug_chk"); // 本函数返回值...

2020-12-09 09:27:51 617

原创 AM335X BeagleBoneBlack wilc3000蓝牙wifi驱动移植

1.源码移植(1)将源码复制到drivers/staging/wilc1000目录下替换原来此目录下的程序。(2)将driver/staging/Makefile文件中的CONFIG_WILC1000修改为CONFIG_WILC(3)将固件复制到文件系统的lib/firmware/mchp目录下2.内核编译选项3.设备树配置spi1_pins: pinmux-spi1-pins { pinctrl-single,pins = <AM33XX_IOPAD(

2020-12-06 13:39:00 621 3

原创 AM335X BeagleBoneBlack RTC时钟驱动移植

1.内核编译选项我这里使用的是pcf8563,自己根据RTC芯片型号选择就可以了。2.设备树i2c1_pins: pinmux-i2c1-pins { pinctrl-single,pins = < AM33XX_IOPAD(0x95c, PIN_INPUT_PULLUP | MUX_MODE2) AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE2) >;};&i2c1{

2020-12-06 13:29:56 440

原创 关于STM32 CAN 发送失败问题解释

首先解释一下CAN几个配置的功能:1.CAN_InitStruct.CAN_TTCM = DISABLE;这个只在某些CAN标准中使用,就设置为DISABLE。2.CAN_InitStruct.CAN_ABOM = ENABLE;这个位我们使能该功能,使用该功能可以在节点出错离线后适时的自动恢复,不需要软件干预。3.CAN_InitStruct.CAN_AWUM = ENABLE;这个位我们使能该功能,使用该功能可以在监测到总线活动后自动唤醒。4.CAN_InitStru.

2020-11-25 13:15:28 12430 6

原创 TI AM335x BeagleBone Black LCD驱动移植

1.内核编译选项2.设备树/ { model = "TI AM335x BeagleBone Black"; compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx"; panel { compatible = "ti,tilcdc,panel"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&lcd_pi

2020-11-24 14:25:28 601

原创 BeagleBoneBlack之背光驱动添加

1.内核编译选项2.设备树backlight: backlight { status = "okay"; compatible = "pwm-backlight"; pwms = <&ehrpwm1 0 200000 0>; brightness-levels = <0 51 53 56 62 75 101 152 255>;...

2020-10-29 17:09:54 229

原创 关于AM335x 最新SDK ti-processor-sdk-linux-am335x-evm-06.03.00.106使用中遇到的问题

1.发现make menuconfig默认使用的不是交叉编译环境导致许多内核选项没有显示解决方法:指定交叉编译工具sudo make ARCH=arm CROSS_COMPILE=/opt/ti-processor-sdk-linux-am335x-evm-06.03.00.106/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf- menuconfig这样就可以使用交叉编译工具了。2.发现make me

2020-08-04 17:27:44 1404

原创 BeagleBoneBlack之CAN驱动添加

1.使用make menuconfig命令进入配置界面选择[*] Networking support --->选择<*> CAN bus subsystem support --->全选,然后进入CAN Device Drivers --->选择上图选择的所有选项,然后保存2.设备树配置&am33xx_pinmux { dcan0_pins_default: dcan0_pins_default { p...

2020-08-04 17:13:50 561

原创 恢复经过软件处理过的U盘导致的U盘空间显示不正确等问题

1.win+R,打开运行,输入CMD,点击确定。2.在命令行中输入DISKPART并回车,会跳出一个窗口,这就进入了diskpart。3.在跳出的窗口diskpart 中输入list disk并回车,会列出以下内容DISKPART> list disk 磁盘 ### 状态 大小 可用 Dyn Gpt -------- ------------- ------- ------- --- --- 磁盘 0 联机 ...

2020-07-07 18:12:14 234 1

原创 关于使用高分辨率屏幕出现kmalloc for frame buffer failed错误的解决方法

使用高分辨率屏幕时,发现分配buffer失败,网上给了很多解决方法:(1)在内核源码中修改DMA_SIZE,然后就是修改各种congig文件,但是编译后发现并没有起到什么作用。(2)还有说将.bpp由32修改为16,这样也会出现问题,首先是界面显示的不对,其次就是偏色严重。以上方法在我这里都不可行。我解决的方法就是,到内核编译选项中去修改分配DMA memory。Device Drivers ---> Graphics support ---> ...

2020-06-18 15:25:20 1076

原创 STM32 FLASH擦写电压的问题,即编程/ 擦除并行位数设置

可以看到根据电压来设置PSIZE,但是看到的手册都说,使用的电压必须和擦写并行位数相匹配,正点原子给的编程手册也是这么写的,这就误导了许多人,任务电压使用3.3V就必须设置PSIZE为10。然后我查找了很多信息,终于找到了这个问题的解释,就是如果你使用3.3V,你最大可以操作的位数就是32位,如果你操作64位,就不保证数据的稳定性了,但是你操作16位和8位是没有问题的。数据手册DM00023388_ZHV1中说明了这个问题,我这里上传不了。可以百度查一下。...

2020-05-18 17:53:07 1661 4

原创 关于STM32使用DMA数据丢失的问题

一、最后两个字节丢失的问题这个我在使用之前就看了相关的资料,说是使用DMA发送完成中断来判断是否发送完成,就会出现最后两个字节丢失的问题。解决方法有说使用延时的,但是这种方式不是很好,对于自己做着玩可以,还有一个解决方式是使用UART发送完成中断来判断是否发送完成,我就使用了这种方法没有出现两字节丢失的问题。二、后半部分字节丢失的问题我使用RS485+DMA发送数据,但是发现很低的概率...

2020-05-08 10:19:30 3799 2

原创 FreeRTOS互斥信号量与二值信号量使用时的区别

1.互斥信号量互斥信号量的申请与释放是要在同一个任务中进行的,不能在一个任务中申请而在另一个任务中释放。互斥信号量主要解决的是,我在用的时候,别人都不能用。举个例子,我在像一段内存中写数据的时候,不允许别人去写和读的,这时候就需要互斥信号量,写之前获取信号量,写完之后再释放互斥信号量。2.二值信号量二值信号量允许在一个任务中申请,在另外一个任务中释放。二值信号量主要解决的是任务...

2020-04-26 16:13:38 2909

原创 关于JAVA做服务器,C做客户端,数据传输无符号数的问题

在做项目时,使用STM32+传感器,通过WIFI传输数据到服务器中,这时就引发了一个问题就是发现一个8位数据一旦超过0x80,服务器接收的数据就会出错。 这是因为java中没有无符号数这个概念,使用byte类型来接收数据,而byte是有符号的,从而导致了接收无符号8位数,超过0x80就会出错。 解决方法就是,java进行数据转换:byte b= -...

2020-04-03 17:20:13 237

原创 关于QT5.14.0不能打包应用程序的问题

使用QT5.14.0时,打包应用程序报错,查阅资料发现时QT5.14.0的BUG。解决方法:下载5.14.1,问题解决,亲测可用。

2020-03-31 14:49:19 778

原创 编译linux内核,使其支持电容触摸屏的功能

1.在使用嵌入式设备时,我们通常使用的是裁剪的linux系统,所当我们需要增加某些功能时就要重新编译内核,然后将内核文件重新写到开发板中。 2.在做项目的时候需要使用usb接口电容触摸屏,但是发现插上后发现只显示usb设备,dev/input目录下并没有新的输入设备产生,所以需要增加内核功能。 3. 因为使用的电容屏是一个HID设备,编译内核需要...

2020-01-15 17:59:00 950

原创 STM32中错误使用malloc引发问题

做项目时,发现程序总是没规律的跑一段时间就挂掉了,排查了3个星期终于找到了原因。错误现象就是进入HardFault中,为了定位导致HardFault原因,就采用了我另一篇博客的方法。找到发现是malloc引起的错误,查阅资料发现,是因为在中断中使用malloc才导致的。所以不要在中断中使用malloc,很容易就导致问题,难以排查。...

2019-12-23 13:15:52 1498 10

原创 定位HardFault_Handler错误的方法

1.在while处打上断点,发生错误时会跳到这个断点上2.进入debug模式后打开Call Stack窗口,点击下图的第五个图标3.当发生错误跳到断点处后右击窗口空白处选择Show Caller Code,就可以看到main之后出现了很多函数,这就是在发生HardFault错误之前调用过的函数,然后检查这几个函数即可,看是否有指针使用错误、数组越界、堆栈溢出等情况的发生。...

2019-12-20 14:37:17 432

原创 STM32的UART检测到上溢错误

一、问题来源做项目的时候,发现程序莫名的就会死掉,因为采用了串口通信,需要不断的去接收数据,而且频率相对较快。二、发现问题用JLink进行硬件调试,发现死在了串口中断里面,不停的进入中断,查看寄存器状态,发现ORE控制位被使能,查阅资料后发现是检测到上溢错误,才导致的这种问题。三、产生这种错误的原因在接收数据时,如果RXNE还没有被复位,而这时又接收到一个字符就会发生溢出错误。...

2019-12-17 14:43:46 2470

原创 关于QT报C:\Program Files (x86)\sogoupinyin\Components\的错误

1.首先就是程序爆出了这样一个问题2.接着查看QT报错信息C:\Program Files (x86)\sogoupinyin\Components\15:53:55: 程序异常结束。发现报错信息很奇怪,为什么是个搜狗拼音。3.最后发现是使用指针的问题使用了未初始化的指针。遇到这种情况就去查看自己的指针在哪里用错了。...

2019-12-03 15:59:47 4235

原创 关于QT5.13.1或者其他版本串口readyRead信号不产生的解决方法

在网上找了各种各样的资料,各种改程序,到最后还是发现,信号不产生,最后只能使用阻塞的方式去读串口接收的数据。不过不甘心,一直在寻求到底程序哪里写错了。最后发现找到原因,不是程序的问题,是这个版本的QT的BUG,可以现在更新到5.13.2,就可以解决,不只是5.13.1有这个问题,还个别版本存在这个问题,所以只有更新软件版本了。...

2019-11-19 17:32:03 2878 10

原创 C语言编写简单的单链表(增删改查)

纯自己写的,就是想试一下自己对指针、链表内容的理解程度,没有经过大量测试,只自己小小的测试了一下。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>struct NODE{ int value; struct NODE *next;};struct NODE *c...

2019-11-15 14:35:00 844

STM32H743硬件IIC函数实现

上传HARDWARE文件夹,包含IIC和AT24C02的初始化和写入读取函数,可直接在主函数调用

2021-01-21

STM32F429IGT6 LED灯程序

使用的板子是正点原子的,两个LED的引脚分别为PB0和PB1,采用宏定义的方法来开关LED灯

2019-08-26

空空如也

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

TA关注的人

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