- 博客(13)
- 收藏
- 关注
原创 STM32(H7)学习记录-11 bootloader+app使用cubeMX配置
cubemx版本6.11.1。基于U盘的bootloader目录一、bootloader二、app一、bootloader 使用cubeMX配置(这里就不描述MPU,时钟等配置了)主要是配置USBH_MSC并使用FatFs作为文件管理系统。并且配置了硬件CRC校验然后进入MDK中,其中g_JumpInit变量,包括跳转函数是参考安富莱 的程序的,请参考实战技能分享,一劳永逸的解决BOOT跳转APP失败问题,含MDK AC5,AC6和IAR_哔
2024-07-23 23:25:36
1091
原创 STM32(H7)学习记录-10 一些(调试)记录
在生成文件时,要生成boot + application (extmemloader不生成是因为,我用了官方的flm文件,如果不用的话可以生成,在mdk里面编译一下 会生成一个 flm文件)既然要使用外部flash就会涉及到烧录算法了,当然,如果使用官方的板子的话,就可以使用官方提供的文件了。由于H7S7的内部(用户)flash只有64KB,如果多使用几个库(比如,usb库),那么内部flash肯定是不够的,因此,需要使用外部flash。最后,在烧录这边添加你的flm算法(我用的是st官方提供的)。
2024-07-05 13:48:13
396
原创 STM32(H7S7)学习记录-9 (XSPI)Octal_flash内存映射
free running clock :手册里面的解释(翻译了一下)→自由时钟 自由时钟(free running clock),即运行时时钟频率、占空比等不随时间发生变化的时钟,通俗来讲线上一直有稳定的时钟信号,比如 I2S 的MCLK、BCLK 非自由时钟 非自由时钟(Non-free running clock),即在运行时,时钟信号不是稳定产生的,只有发送、接受数据时才需要时钟信号,比如 I2C 、SPI 的时钟信号。在写入时,NCS每次时钟周期+1进行刷新,在读取时,每时钟周期+4进行刷新。
2024-06-23 23:58:40
1440
原创 STM32(H7S3)学习记录-8 RCC
看了手册 发现H7S3的HSI时钟频率为64M,那么64M/300/500=427 ,就发现问题了,cubemx生成的例子居然没有配置RCC(即使我在cubemx里面选择了,也不会生成),仅仅是在HAL_init之前有一个 SystemCoreClockUpdate();最近买了一块ST的nucleo H7S3L8H6的板子,到手之后跑了一个threadx的小程序,但发现tx_thread_sleep(1000) 这里我的每秒节拍数也是1000,但我发现真正运行起来 这个APP并不是1秒执行一次。
2024-06-21 20:52:30
175
原创 STM32(H7)学习记录-7 FatFs & Hard fault
查找了很多一直没解决,开始我认为是我程序别的问题,比如数组溢出什么的,但是查找了几天,把大部分中断都关了,堆栈设置到0x10000 也无济于事。因此,当访问完一个块,需要通过FatFs结构体的得知下一个 地址,而,此时FatFs结构体若是局部变量就会使 芯片进入 硬件错误。8192字节应该是 一个块大小。最近在跑程序时,发现访问文件字节多了就会出现硬件错误(0xffff fff1),在debug模式下,想要查找问题,但是一直无果。我的FIL结构体是全局变量,但是FatFs并不是全局变量,是一个局部变量。
2024-05-28 20:45:06
347
原创 STM32(H7)学习记录-6 脉冲跟随(v2)
当外部脉冲输入到 TIM12的TI2FP2引脚,触发(上升/下降沿都触发)TIM12的计数,但配置TIM12是单脉冲,即输出一个脉冲后就关闭计数。DMA配置的是 下降沿触发,因此,会触发一次DMA (将buffer的数据搬运到 GPIOx->BSRR)有时候,我们需要对一个输入脉冲进行跟随输出脉冲(一个脉冲输入,一个或者多个脉冲输出,IO资源不丰富,且不能占用太多CPU资源的情况下)200KHz脉冲下,效果也还可以(粉色是输入脉冲,绿色是输出脉冲)触发源选择 TI2FP2(上升/下降沿都触发)
2024-05-14 21:22:18
321
2
原创 STM32(H7)学习记录-5 NVIC
An interrupt can enter pending state even if it is disabled. Disabling an interrupt only prevents the processor from taking that interrupt.(ST 编程手册 PM0253, P151)注意:禁止中断后,系统滴答中断会被屏蔽,此时,程序中若出现HAL_Delay 这样的函数会卡死!在测试时,发现在禁止中断时,触发一个中断,不会被执行。此时,使能中断后,就会执行这个中断。
2024-05-12 15:29:36
227
1
原创 STM32(H7)学习记录-4 串口不定长收发
需要去访问 rx_buffer,如果你开了cache,上电第一次是读未命中,就去rx_buffer地址下读。之后的访问,就是读命中了,你就会发现 发送的数据 一直都是第一次的数据不变。HAL_UARTEx_ReceiveToIdle_DMA (在stm32h7xx_hal_uart_ex.c,如果没有这个文件 就是HAL库比较老了)测试中 串口接收数据量大的时候,如果不开双buffer(一个存数据,一个发数据) 会丢数据!最近需要做一个串口不定长收发,比如串口1的RX接收,然后使用串口3的TX发送。
2024-04-16 10:16:53
489
原创 STM32(H7)学习记录-3 CANFD
话说 TJA1043 数据手册上标明了 最大5Mbps,但实际测试只有3Mbps多一些,也许是电路问题,传输速度与数据手册差的还是有点大。可以看到最新的hal库底层已经对数据长度做了 <<16 ,我们在发送函数中上就不用 <<16。最近在配置完成 CANFD的程序。其实,应该使用HAL库自带的 参数 这样就可以避免这个问题了,而不是自己 手打一个数字。所使用的主控芯片是STM32H743IIT6,所使用的CAN芯片是 TJA1043。下图是 我用CUBEMX配置的CANFD例程中的 数据长度 宏定义。
2024-04-15 10:33:50
489
1
原创 STM32(H7)学习记录-2 脉冲跟随
TIM12脉冲作为触发输入,DMA1将GPIOx->IDR搬到buffer,buffer再到GPIOy->ORD。(不过BDMA似乎可以实现 外设到外设 具体还没尝试)参考:安富莱H7-BSP DMAMUX的定时器触+DMA双缓冲控制任意IO做PWM和脉冲数控制例程。最近在遇到了一个使用环境,需要在某个IO输入脉冲信号 并且跟随输出脉冲信号。buffer 必须是 DMA1 可访问的地址(DMA2也可) ,因此,要设置。因此,采用的思路是dmamux 中的 触发输入,从而产生请求。在几百KHz下效果还凑合。
2024-04-09 08:17:14
293
原创 STM32(H7)学习记录-1 FMC
对于存储器宽度为16位时,(个人理解)stm32一个地址下的是一个字节(8bit),因此,26位地址是512Mbit,映射到外设上也是512Mbit,因此可以计算得到地址线数量=512Mbit/16=2^25,一种处理就是使用ADDR[25:1]。比如,NE1的地址是0x60000000,外部存储器宽度是32bit,则地址ADDR[25:2],此时,FMC_A[0](ADDR[2])连接外部存储器地址A[0]。复用到io引脚上地址引脚ADDR[25:0],共计26路地址。对于存储器宽度为32位时,类同。
2024-03-13 20:48:26
498
原创 simulink中安装STM32硬件支持包
二:运行所下载的SupportSoftwareDownloader_R2023b_win64.exe。三:找到matlab目录下的install_supportsoftware.exe。安装完成可以在simulink 库中查看(如果已经打开这matlab记得重开软件)打开文件夹里面有一个R2023b(我用的是matlab2023b)下面有一个。在输入以下指令 安装,-archives 后面跟的是archives地址,一般在\MATLAB\R2023b\bin\win64。选择你的matlab版本。
2024-01-30 13:44:41
1842
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人