- 博客(20)
- 收藏
- 关注
原创 stm32安富莱BSP学习(按键驱动)
首先是设定了一下按键的最大个数:这个个数用来判断是哪个按键的时候很好用。#define KEY_COUNT 10 /* 按键个数, 8个独立建 + 2个组合键 */之后是一些按键的宏定义,在判断哪个按键按下时,可以直接用宏来写,这样提高可读性/* 根据应用程序的功能重命名按键宏 */#define JOY_DOWN_U KEY_4_DOWN /* 上 */#define JOY_DOWN_D KEY_5_DOWN /* 下 */
2024-03-17 22:09:47
1111
1
原创 stm32安富莱BSP学习(LED驱动)
附上安富莱的宏定义:写在bsp_led.c 里面的我个人还是喜欢宏定义和结构图在h文件,我给移到H文件去了,这里改成了我自己的硬件GPIOB的时钟通道,以及引脚更改。/*该程序适用于安富莱STM32-V4 开发板如果用于其它硬件,请修改GPIO定义如果用户的LED指示灯个数小于4个,可以将多余的LED全部定义为和第1个LED一样,并不影响程序功能*//* 按键口对应的RCC时钟 */
2024-03-12 21:40:56
1192
1
原创 stm32 DMA理论+实践
定义了一个静态常量num1 和一个变量num,我们打印他们的地址,可以看出num是在2000开头的RAM区,静态常量则是在0800开头的FLASH,和刚刚给出的图一致,一般flash都会比ram大很多倍,所以不需要改变的数据可以存到flash去,节省ram'的空间。既然是个外设,那应该就有相应的寄存器,可以让处理器来操作他,可以看出来两个DMA都是直接挂在在了AHB总线上的,并且还有个以太网外设(因为以太网外设的DMA是单独的,所以并不算在我们这次要讲的DMA里面,但是他有自己的一条DMA通道。
2023-08-27 21:37:42
1091
原创 stm32 AD转换
先大致了解下,后面会写到为什么是1us转换时间、也会写转换结果精度的问题、通道数什么的也会详细介绍、模拟单元后面也会具体讲、模拟看门狗自动检测可以减少进看门狗中断的检测次数减少硬件的压力。(然后每个板子的adc数量是不一样的,f103的好像都是2个ADC,具体有几个就得去看芯片手册了。ADC的引脚定义,有3个ADC,理论上是3个ADC每个16个通道,但是可以看见这里其实1 2基本都是一样的引脚,这里ADC1 2就能交叉采样,让其处理的速度更快。
2023-08-15 23:24:40
2523
2
原创 stm32 can协议实战
在设备传输的过程中可能会有干扰和误差,即使两个设备都是9600这种波特率,可能也会有一个变为9601之类的,这时候数据接收就会可能错位(设备采集数据大多是固定的采样点)在串口中也通过一些硬件的方式来规避采样点错位了,这个我在串口章节有写,和iic和spi这些不一样,can是异步通讯,然后最后通过转换转换为差分信号,但是和modbus不一样,他不是直接通过串口转差分就能用了,使用的不是串口协议,而是做了一些处理,最后形成了can协议,然后can分为开环和闭环两种下面会讲到。
2023-07-25 19:25:51
664
原创 stm32spi实战(硬件+模拟)
接着开始的信号,开始信号拉低了ss,这个时候就能把数据发出去了(只管主机,从机代码不是我们写的)发出去之后拉高时钟线(这里我们用的模式0,时钟线空闲时为0,所以第一个操作只能是拉高)拉高之后就能执行读取的操作了,就是讲函数写入的字节,一位一位的发出去,我们将发送的数据与0x80相与就能发出最高位,之后在与0x40相与就能发出第二位,这样我们直接写一个循环,让0x80依次右移一位,0x1000 0000 这样有数据的位就能发送出去了。就是刚好只变最后一个字节的存储计数为255字节。
2023-07-07 19:35:51
4034
3
原创 stm32 IIC实战
然后后半段,有个SR,这个就是重复起始信号,上一张图最后的sr就是这张图的,这样裁剪让大家好连贯看图,在这重发一个起始位后,我们重复刚刚的当前地址读操作就好,重新发送设备号和读模式,然后直接接收读回来的数据,最后加上停止位,如果你想多字节,不要重复以上步骤,你可以直接先不发停止位,这个后面写代码可以测试。芯片手册上说前四位固定组成,后三位可以根据电平更改,接高为高,接低为低,板载的三根线都直接接地,然后就是最后一位为读写位,1为读 0为写,如果有匹配的设备则设备返回0。
2023-06-27 08:56:03
1229
2
原创 stm32 串口多字节接收
如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用版权声明:本文为CSDN博主「是小刘不是刘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_51426845/article/details/130949055。
2023-06-19 21:32:00
5837
2
原创 stm32 串口收发理论+实践
这里我们自己写一个平方函数,当然也能直接使用库里面的pow函数,然后往里面凑公式,之后将分离出来的数字+‘0’,加了一个字符0,这就是加了一个0的地址偏移量,将其在字符0的基础上+数字之后得到ascll,这里可以看图,我们可以直接写0x30也能写‘0’。然后就是函数的设计了,因为输入的数据是不定长的,所以我们肯定是不可以手动让他除以几的,这时候我们就需要一个记录长度的参数输入了(因为我们需要知道这个数现在该除以多少,需要用这个数据来计算)。,所以我们不能直接打印数字,只能将数字转为字符打印,
2023-06-04 23:39:55
5484
原创 stm32输入捕获
最终实现现象;测量信号频率以及信号的占空比,学习笔记全文有错误都欢迎指正。输入捕获可以拿来做什么:测量频率的两种方式:1、测频法:直接测量一段时间内有几个高电平:一个高电平就是1hz,所以频率=N/T 次数除以时间就比如你一秒计了1000次上升沿跳变,那你频率不就是1000hz了吗2、测周期法:测一个周期内有多少次计数,假设我现在给他一个1000hz的计数器去计算,期间计数值最大设置为1000,那么在一个周期内,记了几个数他的频率就是多少hz;测频法一般需要频率很高,这是为什么,如果频率很低,假设我就只记
2023-05-17 09:05:17
2167
7
原创 指针的进阶
2、*((*p)+i) 先对p解引用找到arr,这时候arr单独出现就代表首元素地址,直接对其++就能跳到下一个元素的地址,再对其解引用。//解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。str1与str2的地址应该是不同的,相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。在《指针》章节我们也学了指针数组,指针数组是一个存放指针的数组。//一级字符指针的数组。
2023-05-10 17:42:17
81
原创 C语言指针及指针进阶
1. 指针初始化(1、指针没有初始化指向了未知地址2. 小心指针越界(2、数组多写越界了3. 指针指向空间释放即使置NULL4. 指针使用之前检查有效性(3、被回收了还在用。
2023-05-10 11:22:02
226
1
原创 stm32 配置PWM及实践
通过:CNT:计数器与CCR寄存器比较来产生的,并且输入捕获和输出比较使用的是同一个寄存器,然后有四个输出比较,但是CNT用的是同一个。以数字量等效出来的模拟量变化,效果如左1图,在一个周期内高电平长就等效的为上半,否则为下半。频率:周期的倒数嘛就是频率,占空比:如图 就是高电平站一整个周期的大小。分辨率:补距 就是说占空比精度 比如占空比从50只能到51那分辨率就是1,原理!!!
2023-04-15 13:13:27
5648
原创 stm32通用定时器的使用
总共分为6个部分:1、RCC的内部时钟打开 2、内部时钟模式的配置 3、配置时基单元 4、配置中断输出控制5、NVIC配置 6、运行控制(计数器使能)
2023-04-11 20:22:25
2652
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人