stm32
yongridada
这个作者很懒,什么都没留下…
展开
-
STM32解决方法 | 双击keil的工程目标,不能打开map文件
问题描述:在使用stm32cubemx生成stm32的工程后,在keil中双击工程目标后,不能打开map文件。原因:使用CubeMX生成的Keil工程,生成map文件的路径不在工程文件夹下。通过修改生成.map文件的路径,将路径修改到当前工程文件夹下就能解决问题。解决方法:...原创 2022-04-18 13:06:37 · 1155 阅读 · 1 评论 -
FREERTOS解决方法 | 在使用FREERTOS的时候,使用osTimerStart出现的问题
一、问题描述在按照教程创建了FREERTOS的定时器后,使用osTimerStart()函数后,不能跳出任务,进入定时器的回调函数中。二、解决方法仔细查看任务与定时器的优先级。确保定时器的优先级高于所有没有挂起的任务的优先级。这样就可以确保进入定时器的回调函数中。...原创 2022-04-01 17:01:44 · 1096 阅读 · 0 评论 -
STM32CUBEMX+FREERTOS使用软件定时器osTimerStart
一、配置STM32CUBEMX1、开启FreeRTOS新建一个 CubeMX 工程,在配置好时钟后,点击 Middleware -> 选择 FreeRTOS -> 下拉框选择 V1 版本 CMSIS2、配置界面配置项功能Tasks and Queues任务与队列,用于配置任务体以及消息队列;Timers and Semaphores软件定时器与信号量,用于配置内核对象 (软件定时器和信号量)Mutexes互斥量,用于配置内核对象(互斥量)Eve原创 2022-04-01 16:54:35 · 2151 阅读 · 0 评论 -
STM32解决方法 | 在USART中断中使用DMA
之前就遇到过一次,但是长时间没用过dma,又给忘记了。问题描述:使用stm32cubemx配置各种usart,并且优先级使用的是默认的配置。因为在使用相关的模块驱动,直接移植以前写的程序,结果移植的是古老的,没有修改过的程序。其中就是在usart2的中断里面使用的usart3的DMA。在模块运行的时候,一直发现输出数据的时候,数据少了半截,并且卡死。原因:在USART2_IRQHandler()函数中,使用了HAL_UART_Transmit_DMA()函数。这样产生了一个问题,DMA是需要中断才原创 2022-03-30 16:42:34 · 5647 阅读 · 0 评论 -
STM32解决方法 | 解决在“stm32的HAL库+freertos”中,使用xTaskResumeFromISR函数无响应
起因最近在有一个项目因为任务比较多,就上了freertos,但是在我接收串口数据后,使用xTaskResumeFromISR函数,进入一个更高优先级的任务时,死活进不去。问题描述在运行一个优先级为5的任务,这个时候串口有数据传给单片机,进入中断接收数据,并使用xTaskResumeFromISR恢复一个优先级为6的任务,使数据写入内部flash。这个时候,恢复的任务优先级为6,原本在运行的任务优先级为5,应该优先执行优先级为6的任务,但单片机不这么执行。解决方法如果函数xTaskResumeFro原创 2022-03-25 09:40:08 · 1731 阅读 · 1 评论 -
STM32CUBEMX | STM32L431RCT6的内部Flash操作
一、STM32CUBEMX配置1、选择芯片型号:2、配置时钟源1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;2、 如果使用默认内部时钟(HSI),这一步可以略过;3、配置时钟树STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:4、代码生成设置点击GENERATE CODE即可生成MDK-V5工程:二、在MDK中编写、编译、下载用户代码1、STM32内部Flash及HAL库API查看所使用芯片的信息,原创 2022-03-22 09:59:49 · 3190 阅读 · 2 评论 -
各大半导体大厂在Github的芯片代码仓库
从事嵌入式开发,经常与底层芯片打交道,在使用一个新的芯片时,一般原厂都会提供相关驱动(driver)、中间件(HAL)以及演示例程(demo),也方便我们快速使用该芯片,提高产品开发效率。一般地,原厂提供的代码包括几部分,● Android/Linux系统板级支持包,这部分可以直接移植过去使用;● Android/Linux驱动,可以移植过去或者参考修改;● 演示例程(demo),提供用户参考;● C/C++中间件,集成一些标准库、协议;● 单片机(MCU)端会提供裸机(C语言)或者各类RTOS原创 2022-03-18 16:59:15 · 575 阅读 · 0 评论 -
STM32CUBEMX | stm32cubemx+FATFS+SDMMC的相关配置与问题
我使用的是stm32L431RCT6、stm32cubemx6.3.0、L4的v1.151固件库、闪迪16GBTF卡。配置:1、使用SD 4 bits Wide bus 模式。2、clock transition on which the bit capture is made:rising transition。3、给sdmmc的时钟频率是48MHz,分频系数是4。(如果后面的代码调试过程中显示出错,可以再降低频率)4、开启sdmmc的RX、TX的DMA。5、开启sdmmc的中断。保证中断的优原创 2022-03-18 09:26:18 · 1690 阅读 · 1 评论 -
芯片datasheet中关于引脚的相关描述
1、引脚中总会有“active low”:低电平有效。原创 2022-02-21 08:54:21 · 4273 阅读 · 0 评论 -
关于使用正点原子的NRF24L01的程序遇到的问题
一、问题:最近要使用NRF24L01,因为看见正点原子有现成的代码,就直接进行拿来主义,结果在使用过程中,遇到了一个问题:使用函数NRF24L01_Check()函数进行检测模块是否是好的。进入调试时,点击全速运行,写入NRF24L01的buf[]={0xA5,0xA5,0xA5,0xA5,0xA5},但是从NRF24L01中读取,却是buf[]={0xE7,0xE7,0xE7,0xE7,0xE7}。但是单步调试时,却是好的,不会读取到0xE7,正确的读到了5个0xA5,这让我百思不得其解。二、解决办法原创 2022-02-09 09:09:38 · 1143 阅读 · 0 评论 -
STM32利用DMA发送无法正确发送数据的问题
一、现象:在子函数中,定义了一个局部变量sendbuf[8] ={1,2,3,4,5,6,7,8},然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送,并利用串口调试助手查看,发现助手可以正确接收普通串口发送函数所发出的数据,而对于DMA发送的数据,接收到的是一堆乱码。二、原因:1、 普通串口发送函数是阻塞型的,比如将上述sendbuf[8]每一个字节发送出去,低层代码逻辑是将1移位到串口的TX寄存器里,硬件检测到后在适当的时间发送出去。在未发送出去前,需要判断TX寄存器是否为空,即判断标志原创 2022-02-07 13:19:58 · 6785 阅读 · 7 评论 -
stm32使用spi读取寄存器值的相关问题
最近在读取正点原子和硬石的DS3234SN和NRF24L01芯片时,发现在通过spi读取寄存器值时,先发送了“读指令+寄存器号”,还要继续通过spi发送一个“0xff”给从芯片,不发送这个“0xff”还不能读取到寄存器值。这是为什么呢?我个人倾向的答案是,我是通过HAL_SPI_TransmitReceive()来收发数据的,我第一次通过spi发送“读指令+寄存器号”,是把这个指令发送给从芯片了,但是还要等一个时间来接收从芯片给stm32的数据,但是这个时候,从芯片已经没有sck了,不能把数据返回给stm原创 2021-12-08 08:49:50 · 5794 阅读 · 0 评论 -
stm32 .map文件各个部分含义
内存溢出的问题,如何分析这类问题的呢?遇到HardFault_Handler 有对map分析过吗?首先讲述一下关于map在MDK-ARM中的配置。其实,在MDK-ARM中,我们可以根据自己的情况(不同配置),在map文件中输出对应(我们需要)的内容。默认情况下,输出所有信息。map文件里面内容大致分为五大类(按照map文件分类的顺序):1.Section CrossReferences:模块、段(入口)交叉引用;2.Removing Unused inputsections from the imag原创 2021-11-22 10:00:40 · 1065 阅读 · 0 评论 -
stm32堆栈的认知
flash和SRAM的区别flash可以像硬盘一样存数据,也可以直接像RAM运行,一般在里面放bootload,程序执行代码。1、stm32中的堆栈单片机是一种集成电路芯片,集成cpu、ram、rom、多种i/o口和中断系统、定时器/计数器等功能。cpu中包括了各种总线电路,计算电路,逻辑电路,还有各种寄存器。stm32有通用寄存器R0-R15以及一些特殊功能寄存器,其中包括了堆栈指针寄存器。当stm32正常运行程序的时候,来了一个中断,CPU就需要将寄存器中的值压栈到ram里,然后将数据所在的地址存原创 2021-11-22 09:19:33 · 5133 阅读 · 5 评论 -
keil5在点击debug时,全速运行按钮不能按的情况
在我程序编译完成后,下载了程序,点击debug进行调试,跳转到debug页面时,发现“run”按钮已经按下,但是不在运行代码,只是在空跑。出现这种情况,目前有以下几种情况:(1)在“options for target“”选项中的“target”中勾选“use micro lib”。(2)在“options for target“”选项中的“C/C++”中,将“optimize”的等级从0->3。(3) 检查给板子的电是否正常。...原创 2021-11-09 09:07:24 · 6637 阅读 · 2 评论 -
1、寄存器版——stm32的system文件夹(delay文件夹)
delay文件夹包含的delay.c和delay.h文件主要有7个函数:void delay_osschedlock(void);void delay_osschedunlock(void);void delay_ostimedly(u32 ticks);void SysTick_Handler(void);void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);前4个函数仅在支持操作系统的时候需要用到原创 2021-10-28 15:35:20 · 933 阅读 · 0 评论 -
4、寄存器版——stm32的跑马灯实验
1、IO介绍stm32f4的io由8个寄存器控制:MODER、、OTYPER、OSPEEDR、PUPDR、ODR、IDR 、AFRH 和 AFRL。我们主要使用io口的推挽输出功能,利用GPIO_Set 函数来设置,即可很简单的完成对 IO 口的配置。io电平兼容问题:大部分io都是兼容5v,凡是有FT/FTf标志(在芯片的数据手册里)的,都是兼容5v的(如果是设置模拟输入模式,一定不能接5v!!!)。没有FT/FTf标志的io,不要接5v,不然可能会烧坏mcu。2、硬件单片机的PF9、PF10原创 2021-10-28 14:48:39 · 480 阅读 · 0 评论 -
2、寄存器版——stm32的system文件夹(usart文件夹)
介绍该文件夹有 usart.c 和 usart.h 两个文件。作用:件用于串口的初始化和中断接收。usart.c里面包含了2个函数:void USART1_IRQHandler(void);和void uart_init(u32pclk2,u32 bound);里面还有一段对串口 printf 的支持代码。如果去掉,则会导致 printf 无法使用,虽然软件编译不会报错,但是硬件上 STM32F4 是无法启动的,这段代码不要去修改。...原创 2021-10-28 13:37:16 · 2106 阅读 · 0 评论 -
STM32串口中断、DMA接收的几点注意地方
STM32串口中断、DMA接收的几点注意地方1、中断接收数据丢失(1)在UART串口中断函数中,或者更高优先级中断函数中不要长时间执行,会导致接收丢失,所以,请勿在中断函数中长时间执行。(2)不建议在中断函数添加延时函数。(3)不能DMA和串口收发同时在中断中进行,会造成串口输出数据乱码。...原创 2021-10-22 08:20:42 · 1385 阅读 · 0 评论