自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 九、串口相关软件介绍

需要连接一个串口的电路,这个电路必须要能保证USART1和电脑进行串口通信(因为这个芯片的串口下载只适配了USART1)需要配置工程,生成一个HEX文件进入BootLoader程序后,STM32执行的程序就是不断接收USART1的数据,刷新到主闪存然后就下载成功了最后还要把BOOT引脚换回来,将跳线帽换到左边两个引脚,然后按一下复位。

2024-10-10 22:02:53 250

原创 九、6 串口收发数据包(代码)

写一个SendPacket函数,目的是调用一下这个函数,TxPacket数组的4个数据就会自动加上包头包尾发送出去。

2024-10-10 21:59:51 359

原创 九、5 USART串口数据包

数据包作用:把一个个单独的数据给打包起来,将同一批的数据进行打包和分割,方便接收方进行识别,方便我们进行多字节的数据通信。

2024-10-08 22:27:02 2037

原创 九、4 串口接收(代码)

RX对应PA10,需要初始化PA10。

2024-10-08 22:17:15 196

原创 九、3 串口发送+printf函数移植+打印汉字

可直接发送十六进制数 如0x41,也可直接发送字符 如'A'常用的汉字字符集有GB2312、GBK、GB18030等。收录了所有国家的字符的字符集:Unicode字符集,常用传输形式是UTF8。

2024-10-06 19:47:01 706

原创 九、2 USART串口外设

STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信,学习串口主要还是异步通信。

2024-10-04 22:53:46 973

原创 九、USART串口协议

在串口中只能发送二进制数,要发送字符,就需要一个数据到字符的映射表(如ASCII码表)如 0x41映射的字符为A,如果以HEX模式显示,就是数据本身,如果以文本模式显示,就会显示字符A。

2024-09-16 14:44:14 1128

原创 八、4 DMA+AD多通道(代码)

PA0接一个电位器,PA1~PA3接3个传感器的AO输出。将DMA初始化的部分复制到ADC_Cmd之前。(3)ADC单次扫描+DMA单次转运。(4)ADC连续扫描+DMA循环转运。首先扫描PA0~PA3这四个通道。将开启DMA时钟的函数挪到前面。(1)复制AD多通道的工程。

2024-09-15 11:14:13 372

原创 八、3 DMA数据转运(代码)

转运一次,传输计数器自减一次,当传输计数器减到0后(Size不再大于0),转运完成(第一个条件不再满足,转运停止),完成一次数组之间的数据转运。若将DataA放在外设站点,DataB放在存储器站点,传输方向就是外设站点—>存储器站点。2)触发源有触发信号(触发源为软件触发,一直有触发信号);(2)DMA是AHB总线的设备,要用AHB开启时钟。1)传输计数器大于0(传一个大于0的Size);(1)DMA函数介绍。

2024-09-09 22:56:11 389

原创 八、2 DMA数据转运 DMA函数介绍

若需要DMA的中断,就调用DMA_ITConfig,开启中断输出,再在NVIC里配置相应的中断通道,然后写中断函数。若使用硬件触发,要调用×××_DMACmd开启对应外设的触发信号的输出;去掉const不会影响程序运行,但会占用SRAM的空间。把数组定义在Flash中,可以节省SRAM的空间。(2)调用DMA_Init,初始化参数。(3)调用DMA_Cmd,通道使能。(1)RCC开启DMAD的时钟。

2024-09-01 20:55:28 427

原创 八、DMA直接存储器存取

DMA是一个数据转运小助手,用来协助CPU完成转运的工作。

2024-08-27 21:29:47 897

原创 四、5 下标引用、函数调用、结构成员(操作符)

(1)下标引用 [ ](2)函数调用 ( )

2024-08-26 21:02:48 302

原创 四、6 逗号表达式

逗号表达式。

2024-08-25 23:28:15 243

原创 四、5 条件操作符

2024-08-23 20:41:36 482

原创 四、4 逻辑操作符

只要有一个为真(非0),结果就为真(为1)左边和右边都为真,结果为真(为1)有一个为假,结果为假(为0)按位与、按位或关注二进制位。逻辑与、逻辑或只关注真假。2、|| 逻辑或(或者)1、&&逻辑与(并且)

2024-08-22 21:19:02 601

原创 四、3 单目操作符&关系操作符

strlen是库函数,用来求字符串长度。sizeof是操作符,不是函数。6)*(与指针配合使用)

2024-08-21 22:06:25 361

原创 四、2 移位操作符&赋值操作符

= ”赋值,“ == ”判断是否相等。

2024-08-20 22:06:31 679

原创 四、1 算数操作符&位操作符

在十进制中异或,a^a = 0(相同为0);(2)“ | ”按位或,有1为1,全为0则为0;(3)“ ^ ”按位异或,相同为0,相异为1.(1)“&”按位与,有0为0,全为1则为1;进行浮点数除法,操作符两端至少有一个浮点数。负数原码到补码,先取反后加一;负数补码到原码,先减一后取反;2、位操作符(只适用于整型)(2)“ % ”取模,得到。(1)“ / ”得到一个。正数的原码和补码相同。

2024-08-15 22:28:41 556

原创 七、4 AD多通道(代码)

扫描模式的转换,前几个通道转换完成后没有标志位,无法判断通道是否转换完成,因此配合DMA来实现。也可通过单次转换,非扫描模式来实现,只需在每次触发转换之前手动更改一下列表第一个位置的通道。利用扫描模式实现多通道,最好配合DMA来实现。光敏等模块的输出接AO(DO是数字输出)(2)在单通道的基础上进行修改。

2024-08-14 20:56:53 491

原创 七、3 AD单通道(代码)

(1)ADCCLK的配置函数(在rcc.h中)(2)ADC的库函数(在adc.h中)

2024-08-13 22:35:16 429

原创 七、2 ADC数模转换器有关函数介绍(Keil5)

(1)ADCCLK的配置函数(在rcc.h中)(2)ADC的库函数(在adc.h中)

2024-08-12 22:13:02 605

原创 三、4 数组作为函数参数

排序应改为。

2024-08-11 22:11:28 368

原创 三、3 数组越界

二维数组可能会在自己的范围内越界(行越界)

2024-08-10 20:33:51 207

原创 三、2 二维数组

2、二维数组的初始化。

2024-08-09 22:14:09 244

原创 七、1 ADC模数转换器介绍+有关知识点

GPIO只能读取引脚的高低电平,而ADC可以对高低电平之间的任意电平之间的任意电压进行量化,最终用一个变量来表示。读取这个变量就可以知道引脚的电压到底是多少。(将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁)ADC就是相当于一个电压表,把引脚的电压值测出来,放在一个变量里。

2024-08-08 22:57:36 3248

原创 四、GPIO的8种工作模式

没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;外部模块输出的默认状态,或外部输出功率非常小,就尽量选择。若外部模块空闲默认输出。若外部模块空闲默认输出。,默认输入第低电平。

2024-08-07 21:47:55 346

原创 三、1 一维数组

在创建数组的同时,给数组内容一些合理的值。数组是一组相同类型元素的集合。4、一维数组在内存中的存储。

2024-08-06 22:05:44 274

原创 六、8 TIM编码器计数和测速代码

一般来说,默认高电平是一个习惯状态,所以上拉输入用的多;若不确定外部模块输出的默认状态,或外部输出功率非常小,就尽量选择浮空输入。,没有上拉电阻和下拉电阻去影响外部信号,但当引脚悬空时,就没有默认的电平了,输入受噪声干扰,来回不断地跳变。3)输入捕获单元(只使用了滤波器和极性选择)若外部模块空闲默认输出低电平,就选择。若外部模块空闲默认输出高电平,就选择。上拉输入和下拉输入选择。:与外部模块保持一致。

2024-08-05 22:47:24 434

原创 六、7 TIM编码器接口介绍

正交编码器设计逻辑:首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减【增还是减由另一项的状态(高低电平)来决定,判断一个边沿就行】通过定时器的编码器接口,实现自动计次,不会占用软件资源,要不然每计一次数就要进一次中断,而且进中断只进行+1的这种简单操作。对于这种需要频繁执行,操作又比较简单的任务,一般可以设计一个硬件电路模块来自动完成,有硬件资源可优先考虑使用硬件资源。法2:利用正交信号(精度更高,A、B都可计次,相当于计次频率提高了一倍;(4)编码器结构和工作模式。

2024-08-04 18:02:13 333

原创 六、6 TIM输入捕获测频率代码和PWMI(测周法)

(1)RCC开启时钟,把GPIO和TIM的时钟打开(2)GPIO初始化,把GPIO配置成输入模式(一般选择上拉输入或浮空输入模式)(3)配置时基单元,让CNT计数器在内部时钟的驱动下自增运行(与之前代码一样)(4)初始化输入捕获单元(5)配置TRGI的触发源为TI1FP1(6)配置从模式为Reset(7)写读取CCR并计算频率的函数N为读取的CCR的值。

2024-08-03 17:51:29 1018

原创 六、5 TIM输入捕获介绍

触发源选择中只有TI1FP1和TI1FP2,没有TI3和TI4的信号,若想使用从模式自动清零CNT,只能用通道1和通道2,若用通道3和4,只能开启捕获中断,在中断里手动清零。②测周法:测量一个周期就出一次结果(出结果速度取决于待测信号的频率,一般情况下,该方法结果更新快),结果值会受噪声的影响,波动比较大。③中界频率:当一个频率用测频法和测周法计次的N相同,就说明误差相同,该频率就是中界频率。CNT的值有上限,最大只能计65535个数,若信号频率太低,CNT计数值可能会溢出。(2)输入捕获(IC)介绍。

2024-08-02 22:06:44 611

原创 二、4 函数的递归与迭代

用递归解决这个问题,由于需要多次重复计算,当 n 较大时,计算效率就非常慢。(2)迭代(速度更快)

2024-08-01 16:10:10 527

原创 六、4 PWM 电机代码

③加大PWM频率,超出人耳听到声音的范围,就听不到蜂鸣器的响声了(人耳听到声音的频率范围是20Hz ~ 20KHz)(1)①复制呼吸灯的代码,将PWM.c和PWM.h文件中的通道1改为通道3,GPIO引脚改为Pin_2。②因为PWM占空比的范围是0~100%,所以可以设置点电机速度变化范围为 -100 ~ +100。即 Freq = CK_PSC / (PSC + 1) / (ARR + 1)可通过改变PSC(预分频)来改变PWM频率。PWM频率 = 计数器的更新频率。

2024-07-31 10:45:35 306

原创 六、3 PWM 舵机代码

同一个定时器的不同通道输出的PWM,频率相同(因为它们共用一个计数器),占空比可以各自设定(由各自CCR决定);CCR = (2000/180)* 角度 + 500 = (100/9)* 角度 + 500。占空比:0.5/20 ~ 2.5/20,即 1/40(0.025)~ 1/8(0.125)(2)舵机要求周期为20ms(50Hz),高电平宽度为0.5ms~2.5ms。先将PWM.c和PWM.h文件中的数据改为Pin_1,和通道2。即ARR+1=20K,PSC(预分频)=72。

2024-07-30 17:11:58 869

原创 六、2 写PWM代码(函数介绍、呼吸灯代码)

为了避免出现问题,①要么将结构体的所有成员都配置完整(没用的也配置一下),②要么就先给结构体成员都附一个初始值,再修改部分结构体成员。(3)配置输出比较单元(CCR的值、输出比较模式、极性选择、输出使能)(时基单元直接到输出比较单元,不用配置NVIC)(4)配置GPIO(把PWM对应的GPIO口初始化为复用推挽输出的配置)1)开启TIM时钟,选择时基单元的时钟,配置时基单元(初始化时基单元)输出比较模式,输出比较极性,输出状态(输出使能),设置CCR寄存器值。2)输出比较初始化(初始化通道)

2024-07-29 14:00:47 924

原创 二、3 函数递归

自己间接或直接调用自己(可大大减少代码量)2、递归必须有停下来的条件。

2024-07-28 22:06:22 237

原创 二、4 函数的声明与定义

3、将函数的定义文件转为静态库。

2024-07-27 21:27:22 353

原创 六、1 TIM输出比较、PWM

OC(Output Compare)输出比较IC(Input Capture)输入捕获CC(Capture/Compare)输入捕获和输出比较单元CNT计数器CCR(Capture/Compare Register)捕获/比较寄存器REF(reference)参考信号。

2024-07-26 13:55:17 669

原创 五、3 定时器 外部时钟 代码

浮空输入一旦悬空,电平就会一直跳(若外部输入功率很小,内部的上拉电阻可能会影响到输入信号,这时可以用浮空输入,防止影响外部输入的电平)没有预分频,每遮挡一次CNT就会加一;有预分频,遮挡几次才会加一。此文章所列代码是在上篇文章代码的基础上进行的修改。(2)开启GPIO时钟,GPIO初始化。ETR引脚的外部时钟模式2配置。滤波器 f 和 N 的对应关系。此时也可以用上拉输入。

2024-07-25 21:01:14 453

原创 五、2 配置定时器(STM32)

操作步骤:开启时钟,选择时基单元的时钟,配置时基单元(初始化时基单元),使能更新中断,NVIC优先级分组和配置NVIC,启动定时器向上计数模式:在这种模式下,计数器从0开始计数,直到达到预设的自动加载值(TIMx_ARR),然后重新从0开始计数,并产生一个计数器溢出事件。这种模式适用于需要测量时间间隔或生成固定频率的脉冲的应用。向下计数模式:与向上计数模式相反,向下计数模式的计数器从自动加载值开始向下计数,直到达到0,然后重新从自动加载值开始计数,并产生一个计数器向下溢出事件。

2024-07-24 13:59:20 4253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除