STM32
STM32学习
骄傲的大树
这个作者很懒,什么都没留下…
展开
-
C语言 CJSON使用实例
JSON数据是一种轻量级的数据交互格式,在各个领域中普遍存在,如嵌入式中与上位机交互,获取某些API接口数据时,常常会使用到JSON数据,json采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交互语言,易于解析与生成。在C语言中,通常使用cJSON对数据进行封装或解析,在使用中不要求熟记于心,但起码得知道怎么用,这对于数据交互相当便利!提示:以下是本篇文章正文内容,下面案例可供参考。原创 2022-12-20 17:30:16 · 1375 阅读 · 1 评论 -
单片机使用C语言实现MQTT协议
单片机使用C语言实现MQTT协议在单片机使用MQTT协议非常普遍,特别是在物联网相关领域,在阿里云,华为云等公有云都提供MQTT协议连接物联网平台。本篇介绍如何用C语言实现MQTT的连接MQTT连接主要有五步骤:1. 连接云平台2. 登录用户名密码等3. 订阅主题4. 发送心跳包5. 发布主题1. 连接云平台跟其他网站一样,只要有服务器地址和端口号就行,在这里我使用了以太网口去连接代码如下:u16 AnalyTarIp(u8 *TarIp,u16 port,u8 i){ stati原创 2021-07-29 18:38:14 · 8590 阅读 · 6 评论 -
STM32 使用定时器计数 寄存器版本
STM32 使用定时器计数 寄存器版本学过51单片机的同学,都知道51单片机只提供了2个定时器 2个外部中断(C52 还有定时器2),在编写一个比较大的工程的时候,有时候会发现定时器完全不够用,而32完全可以克服这一困难STM32F103系列可使用的定时器8个,其中通用定时器有TMI1-TIM7高级定时器TIM0 TIM8而在这 我主要使用通用定时器进行计数使用计时器还是比较简单的,在开发文档中这一张是时基电路的由图可以看出 使用一个简单的定时计数功能实际要操作预分频寄存器和自动重装载原创 2020-08-15 10:38:13 · 1596 阅读 · 0 评论 -
STM32 使用定时器计数 库函数版本
STM32 使用定时器计数 库函数版本库函数版本和寄存器版本一致,就不过多介绍直接上码 如果需要了解寄存器 点此出#include "time.h"#include "led.h"void Time2_Init(u16 per,u16 psc){ TIM_TimeBaseInitTypeDef timeT; NVIC_InitTypeDef nvicN;// led0=0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);原创 2020-08-15 10:48:55 · 1376 阅读 · 0 评论 -
STM32 实现输入捕获 库函数版
STM32实现输入捕获 库函数版输入捕获学好了 才能学好电容触摸相关介绍输入捕获简介在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量 PWM 输入信号的频率及占空比。在输入捕获模式下,当相应的 ICx信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx)来锁存计数器的值。简单的原创 2020-08-17 11:25:56 · 652 阅读 · 0 评论 -
STM32 使用寄存器编写SysTick定时器
STM32 使用寄存器编写SysTick定时器STM32入门一定要搞清楚定时器可以通过system自定义延时函数废话不多说 ,直接上码#include "stm32f10x.h"u16 fas_ms;u32 fas_us;void SystemInit(){}void Led_init(){ RCC->APB2ENR |= 1 << 4; GPIOC->CRL &= 0xFFFFFFF0; GPIOC->CRL |=原创 2020-08-12 18:45:26 · 343 阅读 · 4 评论 -
STM32 时钟 SysTick定时器相关介绍
STM32 时钟 SysTick定时器相关介绍SysTick定时器(滴答计时器)包含SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个外设,被嵌入在 NVIC 中。它是一个24 位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自系统时钟,还可以通过系统时钟8分频后获取。当定时器计数到0时,将从LOAD 寄存器中自动重装定时器初值,重新向下递减计数,如此循环往复。如果开启SysTick中断的话,当定原创 2020-08-11 22:50:46 · 317 阅读 · 0 评论 -
STM32 实现输入捕获 寄存器版
STM32 实现输入捕获 寄存器版上一篇实现了输入捕获库函数版寄存器实现功能和库函数版本一样的,如果需要了解原理,可以查看库函数版本或者查看STM32F10x开发手册代码如下#include "Cap.h"#include "Nvic.h"u8 Cap_Sta;u16 Cap_Val;void Cap_Init(u16 pre, u16 psc){ RCC->APB2ENR |= 1 << 2; RCC->APB1ENR |= 1 << 3;原创 2020-08-17 14:48:49 · 863 阅读 · 0 评论 -
STM32实现待机唤醒 库函数版
STM32实现待机唤醒 库函数版很多单片机都有低功耗模式,STM32 也不例外。在系统或电源复位以后,微控制器处于运行状态。运行状态下的 HCLK 为 CPU 提供时钟,内核执行程序代码。当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗,最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。STM32 的低功耗模式有 3 种:1)睡眠模式(CM3 内核停止,外设仍然运行)2)停止模式(所有时钟都停止)3)待机模式(1.8V原创 2020-08-17 17:04:41 · 799 阅读 · 0 评论 -
STM32实现待机唤醒 寄存器版
STM32实现待机唤醒 寄存器版上篇使用了库函数实现 待机唤醒本文将使用寄存器版本实现关机模式寄存器版本跟库函数版本实现基本一致,可以通过查看库函数版 去看底层代码 更方便去理解寄存器版本寄存器操作根据上两张图可以进行操作相关步骤设置 SLEEPDEEP 位使能电源时钟,设置 WK_UP 引脚作为唤醒源。设置 PDDS 位,执行 WFI 指令,进入待机模式最后编写 WK_UP 中断函数。实现功能如下使用 STM32 的待机模式了,并且可以通过 WK_UP来唤醒 CPU,我原创 2020-08-17 17:14:22 · 394 阅读 · 3 评论 -
STM32 实现PWM 库函数版
TIM1和TIM7没有PWM输出TIM0和TIM8 有七路PWM输出 27 = 14通用定时器 都有4个 PWM 44 = 16一共有30个PWM输出图中,我们假定定时器工作在向上计数 PWM模式,且当 CNT<CCRx 时,输出 0,当 CNT>=CCRx 时输出 1。那么就可以得到如上的 PWM示意图:当 CNT 值小于 CCRx 的时候,IO 输出低电平(0),当 CNT 值大于等于 CCRx 的时候,IO 输出高电平(1),当 CNT 达到 ARR 值的时候,重新归原创 2020-08-19 14:55:41 · 2853 阅读 · 0 评论 -
STM32 实现ADC 库函数版
STM32 实现ADC 库函数版ADC 顾名思义 将模拟信号转换为数字信号ADC转换分为2个通道组:规则通道组和注入通道组。规则通道相当于正常运行的程序,而注入通道,就是中断。程序正常运行(执行规则通道),外部中断产生,执行中断代码(执行注入通道)STM32的ADC的规则通道组包含16个转换,而注入通道包含4个通道内数据存储方式:左对齐 右对齐(存储在16位数据寄存器中 左高 右低)不要将高于3.3V的接到ADC上面通道16 只在ADC1 (内部温度传感器)通道17 只在ADC1 (内部原创 2020-08-18 21:55:07 · 2106 阅读 · 0 评论 -
STM32 实现PWM 寄存器版
STM32 实现PWM 寄存器版上一篇实现PWM 库函数版本 点我这一篇实现寄存器版本使用通道1 CH1 控制PC6小灯原理在库函数中做了相关介绍,这里就不过多说明,它的配置步骤是一样的所以直接上码观看代码如下#include "pwm.h"// pre 自动重转载值 psc预分频数void TIM3_PWM_Init(u16 pre,u16 psc){ RCC->APB1ENR |= 1 << 1; //定时器3 时钟 RCC->APB2ENR |= 1原创 2020-08-19 15:00:56 · 2424 阅读 · 0 评论 -
FATFS能打开文件,不能读写文件
已解决:FATFS能打开文件,不能读写文件并且返回FR_INVALID_DRIVE我在使用移植的FATFS文件系统时,想存取一段信息,但开头就遇到了一个大问题,这个问题花费了我很长的一段时间,终于在不断的尝试下,问题得到解决!不管使用f_write()还是f_read()都出现FR_INVALID_DRIVE这是我出错的代码void CreatPackFile(struct Struct_Pack *dat){ u8 i = 0,j = 0; UINT br; char p[26];原创 2020-09-11 09:15:38 · 2559 阅读 · 1 评论 -
FATFS文件系统f_open()打开一次成功,再次打开程序跑飞
FATFS文件系统打开一次成功,再次打开程序跑飞f_open()FATFS能够打开一次文件,但第二次就不行了!!查阅了一些资料说FATFS的FIL,FATFS结构体太占内存了导致堆栈溢出如果在函数里定义,会跑飞最好声明全局变量定义好了全局变量之后,还是跑飞很大可能是因为读写的FIL结构对象是使用了同一个然而如果有读写功能的,FIL不要使用同一个需要分别定义读文件写文件...原创 2020-09-11 09:34:45 · 2157 阅读 · 2 评论 -
FATFS文件系统读写案例
FATFS文件系统读写案例,亲测有效自己 本来想写一个stm32移植FATFS文件系统进行存取数据但网上能够参照的实例,实在太少,而且出现的问题还挺多于是花费了很长一段时间才将读写问题解决希望能够对一些想要进行FATFS的操作的小伙伴有一定的帮助代码如下FIL fw;FRESULT res;struct Struct_Pack Pack_Fram[5] = {'0',"----",'1',"----",'2',"----",'3',"----",'4',"----"};void Crea原创 2020-09-11 09:42:29 · 2004 阅读 · 3 评论 -
RS485使用串口输出最后一个字节固定为FF
项目场景:将STM32或STM8L作为主控时,在板子上使用到SP3458芯片,来实现串口转RS485输出,从而可以连接其他RS485输出设备问题描述:在串口转485时,根据波特率的不同,总是出现输出最后一个字节固定为0xFF,前面字节会根据波特率丢失或更改字节大小例如:u8 buf[5] = {0x01,0x02,0x03,0x04,0x05}RS485串口输出十六进制01 02 03 04 FFUSART中输出数据代码://RS485串口输出void UART1_SendString原创 2021-01-28 21:18:53 · 3348 阅读 · 1 评论 -
STM32 实现串口通信 寄存器版
STM3 实现串口通信 寄存器版上篇使用的库函数 实现串口通信 ,这么我们就以寄存器实现串口通信寄存器编写和库函数编写原理一样,不同的是需要去查找它的寄存器赋值,以及需要一步波特率计数代码如下:/*串口初始化*/void Uart_Init(u32 mhz,u32 bound){ float temp; u16 A,B,C; temp = (float) (mhz * 1000000) / (bound * 16); //得到USARTDIV A = temp; //得到整原创 2020-08-14 09:17:38 · 2099 阅读 · 0 评论 -
STM3 2实现串口通信 库函数版
STM3 实现串口通信 库函数版串口设置的一般步骤可以总结为如下几个步骤:串口时钟使能,GPIO 时钟使能串口是挂载在 APB2 下面的外设,所以使能函数为:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);串口复位当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。复位的是在函数 USART_DeInit()中完成:void US原创 2020-08-14 09:07:54 · 787 阅读 · 0 评论