- 博客(42)
- 收藏
- 关注
原创 Vscode搭建C语言多文件开发环境
通过这一篇文章看下来,会觉得vscdoe配置起来非常的麻烦,确实不如集成开发环境好用,但是vscode这主题很舒服,看着方便。折腾下来,发现配置也是按照代码编译原理的逻辑来配置的。首先是程序员编写代码,然后调用编译器gcc编译成可执行文件,最后调试时调用gdb进行调试。1.因此在编译时需要指定:需要编译的源文件,gcc的位置,编译后生成的可执行文件名,tasks.json中完成。2.在调试时需要指定:可执行文件名,调试器gdb的路径。在launch.json中完成。
2024-12-17 14:47:12
1547
原创 10-stm32外设DAC学习
DAC是数字转模拟量的模块,通过软件写入数字,输出对应的电压。STM32F1的DAC的数字部分支持8位或者12位,由于12位是放在32位的低16位里面的寄存器里面的,STM32的寄存器只支持字操作,或者半字操作,所以12位放在了16位的内存里面,从而有左对齐和右对齐的区别,这个也就是软件写数据寄存器时有区别,影响不大。DAC但输出还是挺简单的,要用来输出三角波,双DAC,还得做具体实验时再来研究。总体来说比ADC简单许多,转换公式一点要记住。模拟量 = 数字量*分辨率,这个公式在ADC里面是一样。
2024-10-08 19:53:22
831
原创 9-stm32外设ADC学习
STM32的ADC花样挺多的,支持多通道,多触发源,还支持双ADC模式,这两点组合起来能玩出不少花样,今天通读了一遍ADC章节,还有寄存器,并结合标准库编码,看了正点原子的教程和代码,并进行编码验证。18路输入通道,但是只有一个DR寄存器,所以一次只能采集一个通道,那么为了增强功能,增加了一个通道序列的机制,即可以轮询扫描指定的通道,然后使用DMA来搬运,从而实现多通道模拟量采集。在上图中①是核心,18个通道,选择其中一路,此次实验选择的CH1,映射到PA1上。③是转换结束,是否产生中断的配置。
2024-10-08 19:52:22
789
原创 8-stm32外设定时器学习
本系列,将stm32常用片上外设进行整理,包括大致原理和代码,主要是熟悉如何根据手册去编写代码。便于以后需要做实验时,能够快速编写基本的驱动,然后编写应用代码。本系列基于“标准库”整理,开发板用的是正点原子精英版V1.5,单片机是STM32F103ZET6。开发工具KEIL。主要参考资料有《STM32F103xCDE中文参考手册》《STM32F103xCDE中文数据手册》、《CM3权威指南》、《STM32F103xCDE闪存编程手册》、《精英版原理图V1.5》。
2024-10-08 19:51:28
1064
原创 5-stm32内核NVIC和EXTI学习
NVIC是CM3内核的嵌套中断控制系统,即要产生中断,都得经过这个外设,这个外设是CM3内带的,所以只要是以CM3为内核的单片机都是有的。芯片生产厂商在此基础上进行删减。由于这个NVIC是CM3自带的,而ST公司在其基础上进行删减,所以关于NVIC的手册就有2份,一份是ARM公司写的《CM3权威指南》,一份是ST公司写的《STM32F1xx Cortex-M3编程手册-英文版》。在《CM3权威指南》的7、8、9节有NVIC最完整的介绍,如下图所示。
2024-10-08 19:46:34
975
原创 4-stm32外设串口USART学习
USART是"通用同步异步收发器"的英文首字母缩写,STM32支持多种模式,但是最常用的就是"异步模式",即只需要TX和RX来进行通信。如下图所示,两个设备使用串口进行异步通信。异步模式的串口,代码配置上简单,结构框图也比较简单,但是串口很常用,RS232,RS485,IIC和SPI也和串口有很相似之处,所以熟读串口的手册,理解串口协议原理和代码配置,对后续理解其它通信方式也有好处。
2024-10-08 19:44:56
104
原创 3-stm32外设GPIO和AFIO学习
GPIO即是“通用输入输出”的英文缩写,也就是我们能够从芯片外部看到的一根一根的针脚,我们通过编程去控制这些IO口上的电平为高还是为低,如果这个IO口上的电平直接由CPU控制,那么就是通用GPIO,如果由串口、SPI等外设控制,就叫复用IO。如点亮led灯的实验中,与led灯相连 的那个IO口就是通用IO。在串口1收发实验中,串口1的TX(PA9)和RX(PA10)引脚就是复用IO。啰嗦了这么多,学习STM32还是的把手册看熟悉,得知道那部分知识大致在那个位置,需要查阅时能够及时查看。
2024-10-08 19:43:36
949
原创 2-stm32外设RCC学习
本系列,将stm32常用片上外设进行整理,包括大致原理和代码,主要是熟悉如何根据手册去编写代码。便于以后需要做实验时,能够快速编写基本的驱动,然后编写应用代码。本系列基于标准库整理,开发板用的是正点原子精英版V1.5,单片机是STM32F103ZET6。开发工具KEIL。主要参考资料有《STM32F103xCDE中文参考手册》《STM32F103xCDE中文数据手册》、《CM3权威指南》、《STM32F103xCDE闪存编程手册》、《精英版原理图V1.5》。
2024-10-08 19:42:12
604
原创 1--STM32最小系统学习
目前Cortex-M3内核支持JTAG和SW两种调试接口,而STM32F103ZET6使用的内核就是Cortex-M3,所以STM32F103ZET6也支持JTAG和SW两种调试接口,由于JTAG至少需要5条线,而SW只需要2条线即可,所以SW接口使用更加广泛。STM32支持3种启动方式,从主闪存Flash启动、从系统存储器启动、从内置SRAM启动三种方式,通过BOOT0和BOOT1引脚电平决定启动方式,为了兼容这三种启动方式,所以精英版用朓帽来连接。①电源、②下载、③晶振、④启动、⑤复位。
2024-10-08 19:40:27
530
原创 通过网线传输文件
最近想将笔记本上的文件传输到台式机上,文件有点大,所以想用网线组成一个局域网上网。三、将待共享文件夹共享出去,并分配读取和写入权限。五、在另外一台计算机上输入本台计算机ip地址即可。六、如果不通,可能是防火墙拦了,把防火墙关了看看。二、将两台电脑网口都配置成自动获取IP和DNS。四、可改成无密码进入。
2024-09-26 21:06:23
344
原创 台式机通过笔记本上网
由于台式机只有网口,没得wifi网卡,因此想通过笔记本连wifi,再通过网线将笔记本和台式机连接起来,从而实现台式机通过笔记本的wifi上网,即让笔记本当台式机的网关。①连接上wifi,然后打开网络和internet管理->更改适配器选项,如下界面。再安如下配置,将wifi共享给网口。三、台式机网卡配置成自动获取IP和DNS,配置步骤和笔记本一样。五、如果不成功,可能是被防火墙拦截了,关闭防火墙再试。③网口配置成自动获取IP和DNS即可,配置步骤如下。四、用网线将笔记本和台式机连接起来即可。
2024-09-26 20:38:45
3117
原创 Keil5安装STC支持包
④打开keil5新建工程,选择device时查看有无STC支持包即可,如下图。③打开STC-ISP并按照下图操作即可。①安装完成Keil5支持51开发环境。②下载STC-isp。
2024-09-26 20:17:43
1775
原创 Keil5安装arm和C51共存环境
⑤将Keil5_C51下的TOOLS.INI文件拷贝到Keil5_MDK目录下TOOLS.INI文件的末尾,并修改执行路径。②点击c51v95a.exe进行安装,一路next,安装在Keil5_C51目录下。③点击MDK539.ext进行安装,一路next,安装在Keil5_MDK目录下。①建立两个文件夹用于存放Keil5 C51安装程序和keil5 mdk安装程序。④复制Keil5_C51下的C51到Keil5_MDK目录下,如下图。⑦将Keil5的ID拷贝到注册机中生成。②Keil5 C51安装包。
2024-09-26 20:09:35
1937
3
原创 C语法:格式符号%f和%lf引发的错误
执行到: scanf("%f",&profit);时,由于profit是double类型,其占位符因该是%lf,而我写成了float的占位符%f,当键盘上输入8后,profit的值是0,故最后输出也是0。printf("请输入本月利润\n");有明白两者原因的大佬请评论区解答一下。
2024-05-12 15:32:07
312
原创 C语法:for循环执行顺序
外出循环先执行i=1,再判断i<3为真,内层循环执行j=1;=i为假,退出内层循环,执行i++;判断i<3为真,继续执行j=1;=i为真,且j<4为真,执行printf输出i=2,j=2;=i为假,退出内层循环,执行i++;判断i<3为假,退出外层循环。:先执行表达式1,再执行表达式2,若表达式为真;在执行表达4,再执行表达式3,再判断表达式2;即:表达式2为假,则退出循环,表达式2为真,执行表达式4,执行表达式3,再判断表达2,如此循环,表达式1只会在第一次执行。故最终结果是输出i=2,j=1;
2024-05-12 13:59:59
383
原创 嵌入式常用5种通信协议
嵌入式常用五种通信协议为:IIC、SPI。由于这几种通信协议十分相似又有区别,所以分组记忆,红色的为一组,蓝色的为一组。①组都有两条线,且都是异步通信没得时钟线,②组都有时钟线。关于这五种协议网上有很多教程,也说了很多,现根据自己理解总结如下。①电气接口规定 ②物理层时序图规定 ③协议层数据帧格式一、第一组串口为核心:只有两根线:RX和TX,只能实现点对点通信,使用TTL电平,点对点就是只能两台设备通信的意思,对立面是多点通信。
2024-03-14 21:03:53
794
原创 STM32外设分类--学习笔记
本文在于根据自己的理解,将stm32f103外设按照功能分个类别,便于记忆。下面的几张图一定要熟悉,后期编写代码时能够快速找到想要的功能和对应的引脚。我使用的工具链是:使用CubeMX完成keil5工程搭建和引脚初始化功能,然后用Keil5编译和调试代码,再使用VScode阅读和编写代码。至于为什么要使用这三个工具组合起来,是因为这三个软件各自的优点不能集于一身,只能分开使用。
2024-03-12 10:45:00
4303
原创 STM32的DMA搬运串口数据
DMA:Direct memory access controller,即直接内存访问控制器,简单点来说,dma的功能就是将数据从A搬运到B,而不需要cpu的参与。A和B均可以是内存和外设。即有内存到内存、外设到外设、外设到内存、内存到外设四种情况。今天我们的实验用到的就是内存到外设的情况,和外设到内存的两种情况。参考手册上有寄存器说明,但是操作寄存器的工作有hal库帮我们做了,所以我们重点放在理解初始化dma的结构体上,配合代码,方便理解和上手,代码读懂了,在结合寄存器手册,思路就非常清晰了。
2024-03-11 15:40:19
1289
原创 stm32的SysTick外设介绍——学习笔记
SysTick即系统定时器是一个内核外设,而不是片上外设,寄存器手册说明需要查看《Cortex-M3编程手册》,具体是哪一款内核就查哪一款内核的手册,我用的stm32f103所以我查的Cortex-M3。其实就是个24位递减计数器,计数周期是1/SYSCLK,stm32f103里面SYSCLK=72MHZ,所以其计数周期是1/72*10^6s = 1/72us。
2024-03-10 12:23:45
536
原创 stm32的EXTI的初始化-学习笔记
最近在学习stm32外设的过程中,学到EXTI这个外设的时候,感觉有点复杂,虽然是hal库开发,但是不明白所以,所以跟着也野火的教程,一遍看寄存器,一边看hal库的例子,写一篇记录在此,以备查阅。以下叙述思路:①EXTI功能框图是最重要的,因为不仅仅可以大致看出配置流程,还能看出寄存器的控制过程。②GPIO的初始化③AFIO和CR1/2/3/4寄存器和EXIT0-15的映射关系,这个可以在手册AFIO章节中看④NVIC的初始化。
2024-03-07 17:59:51
1385
原创 STM32的GPIO初始化配置-学习笔记
GPIO_TypeDef中就是控制GPIO的7个32位寄存器,具体每个bit位的作用记得看参考手册。这个结构体不需要我们传入参数。我们需要修改的是GPIO_InitTypeDef结构体。GPIO_InitTypeDef结构体定义如下,可以由我们自己配置gpio引脚,速度,模式,这三个参数都是去修改GPIO_TypeDef里面的成员的某个位的。/*!/*!/*!
2024-03-07 14:53:52
4896
原创 stm32启动文件和RCC时钟树-学习笔记
对应的各位的解释如下,此处截图野火提供的中文版参考手册,上图寄存器定义是截的英文手册的图。①PLLXTPRE:在①处可以看到PLLXTPRE可以将HSE二分频或者不分,此处我们的HSE是8M,我们选择不分频。故我们需要将PLLXTPRE置0.在②处,我们选择HSE还是HSI作为PLL的输入时钟,此处我们选择HSE,故我们需要将PLLSRC置为1。③PLLMUL:③处是将HSE频率放大多少倍,我们选择放大9倍,则PLLCLK等于8*9=72MHZ。我们需要将PLLMUL位置为0111.④SW。
2024-03-05 17:27:17
1174
原创 stm32的HAL库和各文件作用—学习笔记
①内核支持的库由arm公司编写,core_cm3.h头文件里面实现了内核外设寄存器的映射。stm32f10x_config.h:主要用于包含外设驱动头文件,而stm32f10x_config.h被包含在stm32f10x.h头文件中,故stm32f10x.h成为了stm32唯一打包的头文件。由于stm32芯片是用的arm的内核,st公司做到外设,由于arm的内核通用,芯片公司可以在这个内核基础上设计自己的外设,因此为了方便用户开发,arm公司联合芯片厂商建立CMSIS标准。,与外设地址相关的都在这里面。
2024-03-04 22:44:38
1709
原创 VScode搭建C/C++工程环境
原来没有搞懂tasks.json和launch.json文件的作用。tasks.json指定编译器gcc.exe的路径,指定要编译的源文件,指定编译生成的可执行文件名。launch.json:指定调试器gdb.exe的路径,需要指定tasks.json中设置的可执行文件名。t=N7T88.配置C++运行和调试环境_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV19c411G7ey/?
2024-02-25 00:07:49
1472
1
原创 通过stm32CubeMX下载stm32库和手册的方法
思路:安装stm32cubemx软件,然后通过这个软件下载库包,并查找存放路径,然后打开。
2024-02-22 15:42:07
1309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人