- 博客(19)
- 收藏
- 关注
原创 嵌入式RTOS多任务程序设计
(4)打开外部时钟,点击 System Core,选择 RCC,在右侧弹出的菜单栏中选择Crystal/Ceramic Resonator。(3)选择调试接口,点击 System Core,选择 SYS,在右侧弹出的菜单栏中选 Serial Wire。此处修改为5(该处宏定义设置堆空间的大小,STM32F103C8T6的RAM只有20K,所以要改小一点),选中以下文件,Add。,选中以下文件,Add。,选中以下文件,Add。,选中以下文件,Add。,选中以下文件,Add。,选中以下文件,Add。
2023-11-27 22:53:26 91
原创 数字温度计
实时时钟RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。在断电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,RTC上的时间会一直走。RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出也就在于掉电之后还可以正常运行。
2023-11-25 23:06:50 95
原创 汉字点阵与OLED屏显
我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办?于是,就有了点阵。例如:8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了。借助取模软件,即可将我们所需要的文字或字母,以点阵的形式呈现出来。我们知道英文字母数量比较少,我们只要用一个字节(8位)就足以表达。但是汉字非常多。要怎么表达呢?
2023-11-19 22:06:47 83 1
原创 IIC协议读取温湿度数据
(5)硬件i2c程序员只要调用i2c的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出。一般使用GPIO管脚,通过软件控制SCL和SDA线输出高低电平,模拟I2C协议的时序,没有寄存器,使用较为简单,但速度较慢且不太稳定。指芯片上的I2C外设,有相应的I2C驱动电路,使用专用的I2C管脚,直接调用内部寄存器进行配置,效率高且稳定,但使用较为复杂。(2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)。(2)选择 STM32F103C8T6芯片。
2023-11-15 11:54:34 94 1
原创 定时器&PWM应用编程
CPU时序振荡周期:CPU外部晶振提供的周期(一般提供晶振频率为12Hz或11.059Hz)状态周期:1个状态周期=2个振荡周期机器周期:CPU内部的时钟周期。外部晶振经过12分频后,就是内部时钟震荡频率。因此,1个机器周期=12个振荡周期。它是CPU完成一个基本动作的时间。指令周期:CPU完成一条指令所需时间,以机器周期为单位。定时器的原理结构:定时/计数器是一个16位的加1寄存器,由高8位THx和低8位TLx(x=0/1)两个8位寄存器组成。当输入脉冲时,定时器加1;
2023-11-04 21:51:50 87 1
原创 基于中断_DMA方式的串口通信
当上位机给stm32发送字符“stop”后,stm32暂停发送“hello windows!STM32系统给上位机连续发送“hello windows!发送一个字符“start”后,stm32继续发送。
2023-11-02 22:50:31 52 1
原创 stm32外部中断模式控制灯亮灭
注意需要设置PB1口位EXTI1。stm32外部中断模式控制灯亮灭。选择MDK-ARM V5编译器。将EXTI中断设置为2和0。
2023-10-24 19:33:40 109 1
原创 stm32cubeMX使用HAL库点亮LED流水灯
Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很 重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。此前,我增加默认为72MHz, 结果波形与预料的不一致,原本是1s翻转一次的波形,显示出来的周期比预想的长得多。首先应该选择Use Simulator,其次是Run to main()选项打钩,然后分别修改上图中的DDL按照以上步骤设置后点击OK,完成设置。选择引脚设置输出寄存器,一共选三个:PA7,PB9,PC15。
2023-10-23 15:25:58 86 1
原创 基于标准外设库的LED流水灯
在Define中添加宏定义USE_STDPERIPH_DRIVER目的是编译#include “stm32f10x.h”至此,标准库的keil工程创建完成。
2023-10-15 21:49:17 177 2
原创 基于Ubuntu和stm32的程序内存分配问题
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数的内部就是无效的,再使用就会报错。当stm32正常运行程序的时候,来了一个中断,CPU就需要将寄存器中的值压栈到RAM里,然后将数据所在的地址存放在堆栈寄存器中。可见,stm32的栈区的地址值是从上到下减小的,堆区则是从上到下增长的。存放函数体的二进制代码。
2023-10-07 21:05:54 73
原创 运用gcc生成静态库和动态库
在终端中输入gedit sub1.c, sub2.c, sub.h, main.c创建源文件并分别编写代码。(shared:表示指定生成动态链接库,不可省略 -fPIC:表示编译为位置独立的代码,不可省略)这时我们再输入ls再观察,可以看到多出来了一个libsub.a文件,这就是我们所创建的静态库。动态库文件命名规范:以lib作为前缀,并且是.so文件。输入ls,可观察到我们目前文件夹一共有7个文件。可发现静态库要比动态库要小得多。得到可执行文件,然后运行代码。
2023-10-07 20:27:10 78 1
原创 STM32F103C8T6制作流水灯
GPIO 是通用输入输出端口的简称,也就是STM32 可控制的引脚, STM32 芯片的 GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 所有的 GPIO 引脚都有基本的输入输出功能。
2023-09-30 18:55:14 2317
原创 register和volatile修饰符的作用
比如:程序的本意是希望ISR中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。register,寄存器变量,告诉编译器它所声明的变量在程序中使用的频率非常高,请编译器尽量将此变量放在寄存器中,这样程序执行速度更快。3.regist修饰的变量不能取地址,寄存器中没有地址的概念,地址是在内存中相关的。
2023-09-24 21:13:00 99 1
原创 STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置
寄存器(Register)是计算机处理器内部的一种高速存储设备,用于存储、操作和传输处理器中的数据和指令。寄存器直接与处理器的运算单元相连,可以快速地存取和操作数据,是计算机性能提升的重要因素之一。在计算机底层原理中,寄存器是处理器中最小的存储单元,通常采用位于CPU芯片内部的高速静态随机存储器(SRAM)实现。它具有以下特点:速度快:由于寄存器直接位于处理器内部,与运算单元相连,因此可以在一个时钟周期内完成数据存取操作,速度非常快。
2023-09-24 21:02:58 540 1
原创 MDK5开发环境中编译stm32闪烁LED程序
本次实验目的是安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单的通过寄存器方式,用某一个GPIO端口点亮LED等程序,但由于没有stm32开发板硬件,所以只了做程序的编译和仿真测试。
2023-09-24 20:41:09 105 1
原创 51程序设计和仿真——流水灯
打开 KEIL 5软件,点击project中的new uversion project新建工程。单击保存,在新跳出对话框中选择单片机型号AT89C51。勾选 Create HEX File,生成hex文件。新建一个文件,点击保存将其后缀改为.c保存为c文件。在program file 中添加hex文件。编译一下简单编写的流水灯代码。51程序设计和仿真——流水灯。将新建的c文件添加到工程中。输入文件名,建议全英文。
2023-09-24 19:36:42 111 1
原创 Ubuntu18.04系统使用gcc和makefile编译c程序
本次实验目的是为了在windows环境下通过虚拟机软件(比如Vmware、VirtualBox)安装Ubuntu 16.04/18.04 Desktop,并设置网络参数保证系统能上网;熟练掌握Ubuntu常用命令,学习使用vi/vim文本编辑软件,并用gcc编译c程序。
2023-09-15 23:04:01 162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人