![](https://img-blog.csdnimg.cn/61df86894ab240829697f88b8a0983db.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
单片机
文章平均质量分 82
主要内容与stm32相关
苦梨甜
嵌入式全栈ing
展开
-
基于systick实现获取系统运行时间
该代码段是一个典型的systick模块,实现了系统时钟初始化、定时中断服务以及获取系统运行时间功能。代码结构清晰、模块化设计、层次分明、接口简洁,易于理解和维护。rcu_clock_freq_get(CK_AHB): 获取AHB时钟频率SysTick_Config(): 配置SysTick定时器while (1);: 死循环g_sysRunTime++: 将系统运行时间加1return g_sysRunTime: 返回系统运行时间。原创 2024-02-29 21:51:07 · 517 阅读 · 1 评论 -
软件分层模块化设计,---抽象与硬件分离
这段代码展示了LED驱动模块的设计,体现了软件分层模块化设计的几个方面:结构体封装:使用结构体 Led_GPIO_t 封装了LED的相关信息,包括使用的 RCC 外设、GPIO 端口和引脚号,使得 LED 相关的信息更具可读性和可维护性。模块化函数设计:将 LED 相关的功能函数(初始化、点亮、熄灭)封装成了独立的函数,分别是 LedDrvInit()、TurnOnLed() 和 TurnOffLed(),这样设计使得 LED 功能模块化,易于扩展和维护。原创 2024-02-29 21:48:13 · 1006 阅读 · 0 评论 -
DWT硬件延时
- DWT里有一个32位的寄存器叫CYCCNT,它是一个向上计数器,记录的是内核时钟运行的次数,内核时钟跳动一次,该计数器就加1,如果内核时钟是120MHz,那精度就是1/120M = 8.3ns,而单片机程序的运行时间通常都是微秒级别的,所以DWT实现延时的精度是非常高的。- 要实现DWT延时的功能,总共涉及到三个内核寄存器: DEMCR、 DWT_CTRL、 DWT_CYCCNT,分别用于开启DWT功能、开启CYCCNT及获得系统时钟计数值;当CYCCNT溢出之后,会清O重新开始向上计数。- 如果内原创 2024-02-26 14:06:52 · 604 阅读 · 0 评论 -
GPIO通用输入输出管脚
GPIO,General Purpose lnput Outpu,指的是芯片的通用输入输出管脚。原创 2024-02-26 13:12:16 · 986 阅读 · 0 评论 -
RAM不够?使用CCMRAM
这段代码是针对 ARM Cortex-M 系列处理器的链接脚本代码,用于描述内存布局中的 .ccmram(Core Coupled Memory RAM)段。综合来看,这段代码的作用是定义了一个名为 .ccmram 的段,该段将位于指定的 CCMRAM 内存区域中。:这一行代码创建另一个全局符号 _eccmram,它将指向此时的地址,即 .ccmram 段的结束地址。:这一行代码创建一个全局符号 _sccmram,它将指向此时的地址,即 .ccmram 段的起始地址。*(.ccmram) 和。原创 2023-08-12 14:56:00 · 1527 阅读 · 0 评论 -
DSP开发:串口sci中断接收数据实现
这一行代码设置 SCI 控制寄存器 (SciaRegs.SCICCR),包括停止位的设置为1位(1 stop bit)、不启用环回测试(No loopback)、不使用奇偶校验(No parity)、数据位设置为8位(8 char bits)、异步模式(async mode)和空闲线协议(idle-line protocol)。这两行代码将之前计算得到的高位波特率寄存器值(scihbaud)和低位波特率寄存器值(scilbaud)写入 SCI 的波特率寄存器,从而配置 SCI 的通信波特率。原创 2023-07-20 19:14:00 · 1935 阅读 · 0 评论 -
DSP开发:串口sci的发送与接收实现
LSPCLK(低速外设时钟)的频率为 37.5MHz,SCI的分频因子为 8(由于设置了 SCIHBAUD 和 SCILBAUD 分别为高8位和低8位),所以分频后的SCI时钟频率为 37.5MHz / 8 = 4.6875MHz。这段代码实现了串口SCI(串行通信接口)的初始化以及向串口发送数据的功能,并且通过函数重定向,将标准库的输出函数重定向到串口SCI上,实现了通过类似于标准库的 printf 函数的格式化字符串向串口SCI发送数据的功能。:用于存储接收到的字符串的字符数组,初始值全部为0。原创 2023-07-20 19:06:25 · 3400 阅读 · 0 评论 -
DSP开发:串口SCI重定位或重定义printf函数实现
0);/** @brief 串口打印重定向*/return _c;return _c;for(i=0;i原创 2023-07-20 18:57:49 · 822 阅读 · 0 评论 -
重定义/自定义printf到串口输出实现的三种方法(cubeide)
ifdef __GNUC__ //串口重定向#else#endifreturn ch;这段代码是重定义了printf函数的输出方法,使用串口进行输出。它通过重定义PUTCHAR_PROTOTYPE宏来定义了一个名为__io_putchar(对于GCC编译器)或fputc(对于其他编译器)的函数。首先,根据编译器类型,PUTCHAR_PROTOTYPE宏会被定义为__io_putchar或fputc。GCC编译器使用__io_putchar,而其他编译器使用fputc。原创 2023-07-13 17:37:38 · 2940 阅读 · 0 评论 -
SGM58031与单片机驱动实现
最后,再次使用 HAL_I2C_GetState 函数等待 I2C 状态变为 HAL_I2C_STATE_READY,确保传输结束。然后,使用 HAL_I2C_GetState 函数等待 I2C 状态变为 HAL_I2C_STATE_READY,表示传输完成。然后,使用 HAL_I2C_GetState 函数等待 I2C 状态变为 HAL_I2C_STATE_READY,表示传输完成。紧接着,通过调用 smg58031_i2c_readregister 函数读取 chip_id 的值,并将其转换为 id。原创 2023-07-09 18:49:30 · 1714 阅读 · 1 评论 -
16位ADC芯片SGM58031驱动重点
第一个字节,0b1001000(第一个7位是I2C地址),第8位是读/写位,现在是低写2。第三个字节,0b10000100(要写入的配置寄存器的MSB,Bit[8]=0表示连续模式)4。第四字节,0b10000011(要写入的配置寄存器的LSB,Bit[7:5]='100’表示数据速率100Hz)第一个字节,0b1001000(第一个7位是I2C地址),第8位是读/写位,现在是低写2。第三个字节,0b10010001(第一个7位是I2C地址),第8位是读/写位,现在是高读4。数据速率等于配置的数据速率。原创 2023-07-09 18:36:25 · 3058 阅读 · 2 评论 -
CSS安装出错:Unicode Character Check -> Your temp directory path contains Unicode characters........
安装css,的时候出现上面内容,并导致无法安装css,上面内容报错原因是:Unicode字符检查->您的临时目录路径包含Unicode字符,这些字符可能破坏套接字。我的出错原因:电脑买的比较早,那时候不懂电脑,用户名只用了中文,后来懂电脑了,只修改了登录账号的用户名,其他原来相关的目录名,并没有修改为非中文,想重装系统,但资料比较多,还没全部整理完。查看用户目录,用户名为中文,而temp目录在用户目录的子目录下,也会有中文。上面查看,我的目录下有中文,导致出现开头错误,下面为解决办法。原创 2023-07-08 22:24:50 · 2745 阅读 · 0 评论 -
两个HC-05蓝牙之间的配对
买了个垃圾蓝牙,不能软件控制AT模式,使用下面方法将就用。使用串口一定要知道三要素,一是波特率,二是串口号,三是数据格式,HC-05只支持一种数据格式: 数据位8 位,停止位1 位,无校验位,无流控制。进入 AT 命令方法:1,按住按键或EN脚拉高,此时灯是慢闪,HC-05进入AT命令模式,默认波特率一般是38400;此模式我们叫原始模式。原始模式下一直处于AT命令模式状态。2,HC-05上电开机,红灯快闪,按住按键或EN拉高,HC-05进入AT命令模式,默认波特率是9600;原创 2023-06-14 10:12:33 · 2021 阅读 · 0 评论 -
STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)
mpu6050_write_byte函数用于向MPU6050的指定寄存器写入单个字节的数据。mpu6050_get_accelerometer函数用于获取MPU6050的加速度值。mpu6050_read_byte函数用于读取MPU6050指定寄存器的单个字节数据。mpu6050_get_gyroscope函数用于获取MPU6050的陀螺仪值。mpu6050_set_gyro_fsr函数用于设置陀螺仪传感器的量程范围。mpu6050_hw_init函数用于初始化MPU6050相关的硬件引脚。原创 2023-06-12 15:31:57 · 1545 阅读 · 0 评论 -
STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)
然后,它通过串口调试助手打印这些数据。mpu6050_write_byte(uint8_t addr, uint8_t reg, uint8_t dat): 向MPU6050指定寄存器写入一字节数据的函数。mpu6050_read_byte(uint8_t addr, uint8_t reg, uint8_t *dat): 读取MPU6050指定寄存器的值的函数。MPU6050_WriteReg(uint8_t reg_add,uint8_t reg_dat): 将数据写入MPU6050寄存器的函数。原创 2023-06-12 15:22:57 · 3488 阅读 · 5 评论 -
基础工程(cubeide串口调试,printf实现,延时函数)
* 串口1,调试串口 ------------------------------------------------------------*/ /* 接收缓冲, */ uint8_t g_usart_rx_buf [ USART_REC_LEN ] = {0 };0 };/* HAL库使用的串口接收缓冲 */原创 2023-06-09 12:30:27 · 903 阅读 · 0 评论 -
tb6612电机驱动软件开发(cubeide工程调试,引脚等设置)
系统时钟分频得到的总线时钟:AHB(Advanced High performance Bus,高级高性能总线,用于高性能模块CPU、DMA、DSP之间的连接)、APB1、APB2、APB3和APB总线时钟(Advanced Peripheral Bus,高性能外围总线,用于低带宽的周边外设之间的连接,例如UART)以及Systick时钟的最终来源都是系统时钟SYSCLK。③:PLL 分频系数 M 配置。用于连接电机的电机A电机输出端1,A电机输出端2,B电机输出端2,B电机输出端1来控制电机的正反转。原创 2023-06-07 21:34:25 · 1496 阅读 · 0 评论 -
tb6612电机驱动与JGB37-520减速直流电机
编码器是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。按照读出方式编码器可以分为接触式和非接触式两种;按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。按照原理可分为(常见的)原创 2023-06-07 19:29:01 · 15929 阅读 · 6 评论 -
FreeRTOS多任务系统
要注意的是多任务系统的多个任务可以“同时” 运行,是从宏观的角度而言的,对于单核的 CPU 而言, CPU 在同一时刻只能够处理一个任务,但是多任务系统的任务调度器会根据相关的任务调度算法,将 CPU 的使用权分配给任务,在任务获取 CPU 使用权之后的极短时间(宏观角度)后,任务调度器又会将 CPU 的使用权分配给其他任务,如此往复,在宏观的角度看来,就像是多个任务同时运行了一样。FreeRTOS会根据栈的大小,从FreeRTOS的系统堆中分配一块内存,作为任务的栈空间。原创 2023-06-03 18:25:14 · 1827 阅读 · 1 评论 -
串口,IIC,SPI,USB等总线叙述
之后, 每次传输的数据也是1字节, 从MSB开始传输。PCI-E(PCI Express)是Intel公司提出的新一代的总线接口,PCI Express采用了目前业内流行的点对点串行连接,比起PCI以及更早的计算机总线的共享并行架构,每个设备都有自己的专用连接,采用串行方式传输数据,不需要向整个总线请求带宽,并可以把数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。如下图所示, 在SPI总线的传输中, SS信号是低电平有效的, 当我们要与某外设通信的时候, 需要将该外设上的SS线置低。原创 2023-03-25 22:37:31 · 1632 阅读 · 0 评论 -
CRC校验-基于MODBUS协议实现源码
工业控制中常常使用MODBUS协议,基于modbus协议的CRC校验源码原创 2022-12-01 20:06:05 · 533 阅读 · 0 评论 -
移远EC600N 4G模块连接步骤
4G模块连接详细步骤(移远EC600N,onenet,stm32)物联网原创 2022-12-01 19:48:28 · 3772 阅读 · 4 评论