![](https://img-blog.csdnimg.cn/61f433edaa99476caaf807475ef27643.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
stm32
文章平均质量分 88
主要从事Linux开发,单片机开发仅为比赛需求或项目需求,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 评论 -
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 评论 -
重定义/自定义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 评论 -
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 评论