![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
文章平均质量分 79
Huskar_Liu
这个作者很懒,什么都没留下…
展开
-
STM32第三十二课(Freertos, HAL, Cubemx, Ethernet, LWIP)
通过在cubemx中配置ethernet和lwip,可以方便的使用网络功能。首先是要配置ethernet。原创 2022-01-25 16:59:41 · 4885 阅读 · 1 评论 -
STM32第三十一课(IAP,bootloader,USART,CubeMX)
官方参考例程AN4657。https://www.st.com/en/embedded-software/x-cube-iap-usart.html原创 2022-01-05 13:23:55 · 1709 阅读 · 0 评论 -
STM32第三十课(IAP,bootloader)
应用中产品装配完成后,下载口不便引出的情况下,或者是某些设备需要具有远程更新程序情况下,使用串口IAP的方式将会更加便捷。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。[ bootmode1:bootmode0 ]1)00或者10:即bootmode为0时,始终从Main Flash启动。是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。起始地址0x80000000。2)01:即bootmode0为原创 2022-01-05 09:54:22 · 5205 阅读 · 0 评论 -
STM32第二十九课(Freertos, HAL, cubemx,CMSIS)
来看看CMSIS_V1对Freertos的API的封装。typedef QueueHandle_t osMessageQId;typedef struct QueueDefinition * QueueHandle_t;typedef struct QueueDefinition xQUEUE;typedef xQUEUE Queue_t;所以,在CMSIS下,osMessageQId,是一个指针,是一个Queue的句柄。...原创 2021-12-30 14:29:53 · 1315 阅读 · 0 评论 -
STM32第二十八课(Freertos, HAL,cubemx,task notification)
task notification是更高级的IPC。可以替代sem,queue, event group等。TN是一种更高效率的IPC方式。每个task都有一个task notification vector,TNV。32bits。+++++++++++++++++++++++++++++++++++++++++++使用TNV模拟二值信号量。void DataProcess_task(void *pvParameters){ u8 len=0; u8 CommandValue=COMMAN原创 2021-12-26 18:33:38 · 566 阅读 · 0 评论 -
STM32第二十七课(Freertos, HAL,cubemx,eventgroup)
eventgroup是一种更高级的IPC。每个EG,具有24个bit,也就是说,具有24个标志flag。用户任务可以通过调用API,可以针对每个标志,打标或者清标。这种方式,是最接近于前后台架构下的使用方式。+++++++++++++++++++++++++++++++++常用的API有,xEventGroupSetBits----对一个EG,打标。xEventGroupClearBits----对一个EG,清标。xEventGroupGetBits----获取一个EG的当前值。如果用户只关原创 2021-12-26 18:12:20 · 562 阅读 · 0 评论 -
STM32第二十六课(Freertos, HAL,cubemx,soft timer)
freertos提供了soft timer。原创 2021-12-26 16:55:55 · 2613 阅读 · 0 评论 -
STM32第二十五课(Freertos, HAL, cubemx, IPC)
在前后台架构中,我们使用了全局变量,作为前台ISR和后台main之间的共享数据。freertos中,可以使用更复杂的data share,那就是list。对于一个需要数据看板和数据处理的应用场景,多任务之间,可以通过共享list,实现数据处理。freertos提供了list相关的增删改查的API。最常见的,就是data board类的应用。多个任务,均可以在数据报表中增删改查,完成各个任务自己的业务。++++++++++++++++++++++++++++++++++++list,是最基础的共原创 2021-12-26 14:29:28 · 1349 阅读 · 0 评论 -
STM32第二十四课(Freertos ,HAL ,cubemx, Tasksuspend)
osDelay方式,将任务挂起,是基于time base的,当时间到了之后,任务会取消挂起,但是,有些情况下,并不知道何时需要将任务挂起,又何时再将任务恢复,这时候,就需要使用事件挂起方式,当事件到来时,将任务挂起,当另外的事件到来时,再将任务恢复。所有有两种场景,一种是ISR内挂起任务,一种是任务内挂起任务。tasksuspend和taskresume是成对使用。suspend的任务,只能由resume函数解放。如果是在ISR中使用,那么需要调用fromisr版本的API。++++++++++原创 2021-12-26 13:31:30 · 419 阅读 · 0 评论 -
STM32第二十三课(Freertos, HAL ,Cubemx)
勾选cmsis v1,++++++++++++++++++++++++++++++++++++++config param:++++++++++++++++++++++++++++++++++++include param++++++++++++++++++++++++++++++++++advance setting+++++++++++++++++++++++++++++++++++task and queue+++++++++++++++++++++++++++++++++++ti原创 2021-12-25 15:58:10 · 756 阅读 · 0 评论 -
STM32第二十二课(I2S,HAL,cubemx)
本文使用cubemx生成尽可能多的代码。原创 2021-12-24 17:15:31 · 3150 阅读 · 1 评论 -
STM32第二十一课(USB SLAVE, HAL)
STM32F407 的 USB OTG FS 是一款双角色设备 (DRD) 控制器,同时支持从机功能和主机功能,完全符合 USB 2.0 规范的 On-The-Go 补充标准。此外,该控制器也可配置为“仅主机”模式或“仅从机” 模式,完全符合 USB 2.0 规范。从机模式下则仅支持全速(FS, 12 Mb/s)收发器。ST 提供了我们一个完整的 USB OTG 驱动库(包括主机和设备),通过这个库,我们可以很方便的实现我们所要的功能,对于USB OTG FS功能模块, STM32F4通过AHB原创 2021-12-24 12:00:55 · 2926 阅读 · 0 评论 -
STM32第二十课(I2S,HAL)
WAV 即 WAVE 文件, 标准格式化的 WAV 文件和 CD 格式一样,也是 44.1K 的取样频率, 16 位量化数字,因此在声音文件质量和 CD 相差无几!WAV 一般采用线性 PCM(脉冲编码调制)编码, WAV 是由若干个 Chunk 组成的。RIFF WAVE Chunk、Format Chunk、 Fact Chunk(可选)和 Data Chunk。 每个 Chunk 由块标识符、数据大小和数据三部分组成,块标识符由 4 个 ASCII 码构成,数据大小则标出紧跟其后的数据的长度(单原创 2021-12-22 10:12:54 · 5714 阅读 · 0 评论 -
STM32第十九课(SDIO,FATFS,HAL)
STM32F4 的 SDIO 控制器包含 2 个部分: SDIO 适配器模块和 APB2 总线接口,复位后默认情况下 SDIO_D0 用于数据传输。初始化后主机可以改变数据总线的宽度SDIO_D0、 SDIO_D[3:0]或 SDIO_D[7:0]可以用于数据传输。MMC 版本 V3.31 和之前版本的协议只支持 1 位数据线,所以只能用 SDIO_D0(为了通用性考虑,在程序里面我们只要检测到是 MMC 卡就设置为 1 位总线数据)如果一个 SD 或 SD I/O 卡接到了总线上,可以通过主机配置原创 2021-12-21 12:59:11 · 2406 阅读 · 0 评论 -
STM32第十八课(FSMC,SRAM,HAL)
XM8A51216 的 A[0:18]并不是按顺序连接 STM32F4 的 FMSC_A[0:18],不过这并不影响我们正常使用外部 SRAM,因为地址具有唯一性。这样设计的好处,就是可以方便我们的 PCB 布线。使用 FSMC 的 BANK1 的sector3 来控制 XM8A51216,因为 XM8A51216 的读写时间基本一致,所以,我们设置读写相同的时序来访问 FSMC。++++++++++++++++++++++++++++++++++++++使能 FSMC 时钟,并配置 FSMC 相原创 2021-12-21 10:44:33 · 1730 阅读 · 0 评论 -
STM32第十七课(SPI,HAL)
STM32F4 的 SPI 功能很强大, SPI 时钟最高可以到 37.5Mhz,支持 DMA,可以配置为 SPI协议或者 I2S 协议(支持全双工 I2S)。我们使用 STM32F4 的 SPI1 的主模式,++++++++++++++++++++++++++++++SPI相关的库函数和定义分布在文件 stm32f4xx_spi.c 以及头文件 stm32f4xx_spi.h 中。配置相关引脚的复用功能,使能 SPI1 时钟。我们要用 SPI1,第一步就要使能 SPI1 的时钟, SPI1 的原创 2021-12-20 19:48:59 · 3281 阅读 · 0 评论 -
STM32第十六课(DMA,HAL)
有 2 个 DMA 控制器(DMA1 和 DMA2), 共 16 个数据流(每个控制器 8 个), 每一个 DMA 控制器都用于管理一个或多个外设的存储器访问请求。每个 DMA 控制器有 8 个数据流,每个数据流有多达 8 个请求5 个事件标志(DMA 半传输、 DMA 传输完成、 DMA 传输错误、 DMA FIFO 错误、直接模式错误),进行逻辑或运算,从而产生每个数据流的单个中断请求仅 DMA2 控制器支持存储器到存储器的传输, DMA1 不支持。DMA_SxCR 控制数据流到底使用哪一个通道原创 2021-12-20 16:29:12 · 3216 阅读 · 0 评论 -
STM32第十五课(DAC,HAL)
DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往DORx 寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。如果没有选中硬件触发(寄存器 DAC_CR1 的 TENx 位置’ 0’ ),存入寄存器 DAC_DHRx的数据会在一个 APB1 时钟周期后自动传至寄存器 DAC_DORx。如原创 2021-12-20 14:56:39 · 1585 阅读 · 0 评论 -
STM32第十四课(ADC,HAL)
STM32F407ZGT6 包含有 3 个 ADC。 STM32F4 的 ADC 最大的转换速率为 2.4Mhz,也就是转换时间为 0.41us(在 ADCCLK=36M,采样周期为 3 个 ADC 时钟下得到),不要让 ADC 的时钟超过 36M,STM32F4 的 ADC 在单次转换模式下,只执行一次转换,该模式可以通过 ADC_CR2 寄存器的 ADON 位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通道),这时 CONT 位为 0。一旦所选择的通道转换完成,转换原创 2021-12-20 09:53:35 · 2309 阅读 · 0 评论 -
STM32第十三课(RTC,HAL)
RTC 时钟分频。一般我们选择 LSE,即外部 32.768Khz 晶振作为时钟源(RTCCLK),而 RTC 时钟核心,要求提供 1Hz 的时钟,所以,我们要设置 RTC 的可编程预分配器。原创 2021-12-18 18:18:29 · 2123 阅读 · 0 评论 -
STM32第十二课(自建实用库,lcd_disp,HAL)
STM32中,使用LCD,是基于FSMC接口的MM方式,HAL库并没有提供LCD的显示库,我们自建一个基于MM的库,lcd_disp,在其中实现show的功能。++++++++++++++++++++++++++++++++++++原创 2021-12-18 15:07:27 · 1989 阅读 · 0 评论 -
STM32第十一课(自建实用库,utility, HAL)
串口最常用的函数,就是printf,STM32中,HAL库并没有实现基于串口的stdio库,我们自建一个基于串口的库,utility,在其中实现printf。STM32中,使用LCD,是基于FSMC接口的MM方式,HAL库并没有提供LCD的显示库,我们自建一个基于MM的库,lcd_disp,在其中实现show的功能。++++++++++++++++++++++++++++++++...原创 2021-12-17 19:09:01 · 939 阅读 · 0 评论 -
STM32第十课(FSMC,LCD,HAL)
STM32F407 或 STM32F417 系列芯片都带有 FSMC 接口,能够与同步或异步存储器和 16 位 PC 存储器卡连接,包括 SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。STM32F4 的 FSMC 将外部设备分为 2 类: NOR/PSRAM 设备、NAND/PC 卡设备。共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备,TFTLCD 就是用的 FSMC_NE4 做片选,其实就是将 TFTLCD 当成 SRAM 来控制。为什么可以把原创 2021-12-17 17:07:06 · 2335 阅读 · 3 评论 -
STM32第九课(Input Capture, HAL)
输入捕获测量高电平脉宽的原理,首先设置定时器通道 x 为上升沿捕获,这样, t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。在 t1~t2 之间,可能产生 N 次定时器溢出,这就要求我们对定时器溢出,做处理,t1~t2之间, CNT计数的次数等于:N*ARR+CCRx2,有了这个计数次数,再乘以原创 2021-12-16 15:26:42 · 2962 阅读 · 2 评论 -
STM32第八课(PWM,HAL)
定时器TIM3,产生 PWM 输出。当 CNT 值小于 CCRx 的时候, IO 输出低电平(0),当 CNT 值大于等于 CCRx 的时候,IO 输出高电平(1),当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率,除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。通用定时原创 2021-12-16 11:45:39 · 3625 阅读 · 1 评论 -
STM32第七课(TIM,HAL)
通用定时器包含一个 16 位或 32 位自动重载计数器(CNT),该计数器由可编程预分频器(PSC) 驱动。定 时 器 相 关 的 库 函 数 主 要 集 中 在 HAL 库 文 件 stm32f4xx_hal_tim.h 和stm32f4xx_hal_tim.c 文件中。+++++++++++++++++++++++++++++++++++++++++++++++TIM3 时钟使能。HAL 中定时器使能是通过宏拟函数来实现对相关寄存器操作的,方法如下:__HAL_RCC_TIM3_CLK_ENA原创 2021-12-15 21:35:15 · 3225 阅读 · 1 评论 -
STM32第六课(WDG,HAL)
IWDG由内部专门的 32Khz 低速时钟(LSI) 驱动,时钟是一个内部 RC时钟,所以并不是准确的 32Khz,而是在 15~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算。相 关 的 库 函 数 操 作 函 数 在文 件 stm32f4xx_hal_iwdg.c 和 对 应 的 头 文件stm32f4xx_hal_iwdg.h 中。++++++++++++++++++++++++++++++++取消写保护和设置预分频系数以及重装载值在 HAL 库中是通原创 2021-12-15 20:07:03 · 1562 阅读 · 0 评论 -
STM32第五课(Interrupt,HAL)
HAL 库的 stm32f4xx_hal_exti.h 和 stm32f4xx_hal_exti.c 文件中。STM32F407 的中断控制器支持 23个外部中断/事件请求。EXTI 线 0~15:对应外部 IO 口的输入中断。EXTI 线 16:连接到 PVD 输出。EXTI 线 17:连接到 RTC 闹钟事件。EXTI 线 18:连接到 USB OTG FS 唤醒事件。EXTI 线 19:连接到以太网唤醒事件。EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。原创 2021-12-15 16:50:31 · 796 阅读 · 0 评论 -
STM32第四课(UART,HAL)
HAL 库函数。这些函数和定义主要分布在 stm32f4xx_hal_usart.h 和 stm32f4xx_hal_usart.c 文件中。+++++++++++++++++++++++++++++++++串口作为 STM32 的一个外设, HAL 库为其配置了串口初始化函数。HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);入口参数 huart,为 UART_HandleTypeDef 结构体指针类型,称其为串口句柄。一般情原创 2021-12-15 13:50:59 · 3451 阅读 · 0 评论 -
STM32第三课(GPIO, HAL)
GPIO 相 关 的 函 数 和 定 义 分 布 在 HAL 库 文 件 stm32f4xx_hal_gpio.c 和 头 文 件stm32f4xx_hal_gpio.h 文件中。在 HAL 库开发中, 操作四个配置寄存器初始化 GPIO 是通过 GPIO 初始化函数完成:void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)通常在cubemx中,会生成初始化代码,调用这个函数。typedef struct{u原创 2021-12-15 09:24:28 · 1011 阅读 · 0 评论 -
STM32第二课(cubemx,clk,gpio,)
cubemx用来生成platform。原创 2021-12-14 13:51:54 · 826 阅读 · 0 评论 -
STM32第一课(Keil, Type, macro)
keil中需要注意的选项设置++++++++++++++++++++++++++++++stm32中常用的类型定义++++++++++++++++++++++++++++++stm32中常用的宏定义+++++++++++++++++++++++++++++++原创 2021-12-13 10:35:39 · 1102 阅读 · 0 评论