- 博客(21)
- 收藏
- 关注
原创 单片机程序是怎么具体操作到物理IO的
这些寄存器是具有特定地址的内存单元,通过向这些寄存器写入特定的值,可以实现对外设的控制和配置。在库文件中找到已经定义了GPIOB的地址的宏定义,其中把它强制转换为了GPIO_Module类型。在keil中通过对应的下载算法.FLM把程序下载到对应flash的地址中。所谓Flash下载算法,是负责擦除,下载应用数据到flash的一个软件。那我们在想操作GPIOB的某个IO口时,只需要操作对应的结构体即可。通过上面几张图可以看出对应的地址是跟数据手册上的地址是对应的。,实现对寄存器的读写操作。
2023-10-31 18:55:32
170
原创 SK6812驱动入门
我看数据手册一般是特性、引脚定义、外围电路、时序图以及驱动代码。特性● Top SMD内部集成高质量外控单线串行级联恒流IC;● 控制电路与芯片集成在SMD 3528元器件中,构成一个完整的外控像素点,色温效果均匀且一致性高。● 内置数据整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。● 内置上电复位和掉电复位电路,上电不亮灯;● 灰度调节电路( 256级灰度可调),● 红光驱动特殊处理,配色更均衡,● 单线数据传输,可无限级联。● 整形转发强化技术,.
2022-01-17 14:48:38
3274
原创 MDK软件仿真使用
复位,其功能等同于硬件上按复位按钮,相当于实现了一次硬复位。按下该按钮后,代码会重新从头开始执行。 代码全速运行 执行到断点处,按按钮用来快速执行到断点处,有时候并不需要观看每步时怎么执行的,而是想快速执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是已在查看的地方设置了断点。 停止运行,此按钮在程序一直执行的时候变为有效,可以使程序停止下来进入到单步调试状态。 4、执行进去,该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下等同于执行过去按钮。 执行过去,在碰到有函数..
2022-01-14 13:37:33
1379
转载 重定向printf函数到串口输出的多种方法
本文详细的介绍了如何重定向printf输出到串口输出的多种方法,包括调用MDK微库(MicroLib)的方法,调用标准库的方法,以及适用于 GNUC 系列编译器的方法。1.printf与fputc对于 printf 函数相信大家都不陌生,第一个C语言程序就是使用 printf 函数在屏幕上的控制台打印出Hello World,之后使用 printf 函数输出各种类型的数据,使用格式控制输出各种长度的字符,甚至输出各种各样的图案。除此之外,在程序出错的时候,懒得调试,直接简单粗暴的加个 print
2021-10-08 13:57:22
13445
原创 C语言中volatile的作用和使用方法
在程序设计中,尤其是在C语言、C++、C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。编译器优化编译时会把不变的值放在寄存器,以供读取,标记volatile可以保证不被放入寄存
2021-10-08 11:17:27
1308
原创 在雅特力AT32F403ZGT6开发板上验证SPI1引脚重映射
1、引脚定义#define FLASH_SPI SPI1#define SPIx_RCC_CLK RCC_APB2PERIPH_SPI1#define SPIx_GPIO_RCC_CLK RCC_APB2PERIPH_GPIOB#define SPIx_PIN_NSS GPIO_Pins_7#define SPIx_PORT_NSS GPIOB#define SPIx_PIN_SCK
2021-08-30 18:10:15
1743
1
原创 时钟树知识感悟
4个时钟源:HSE(外部高速时钟),HSI(内部高速时钟),LSE(外部低速时钟),LSI(内部低速时钟).外部高速时钟HSE一般使用无源晶振,外接起振电容,由IC内部震荡点电路当外部振荡器稳定后,对应RCC_CTRL寄存器:HSESTBL位被硬件置1.外部高速时钟HSE对应AT32的RCC_CTRL寄存器:HSEEN。使能位外部低速时钟LSE对应AT32的RCC_CTRL寄存器:LSEEN。使能位...
2021-06-30 18:53:00
356
原创 IIC实验感想
初始化SDA数据线和SCL时钟线void IIC_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//使能GPIOB GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;//PB6,PB7 GPIO_InitStructure.GPIO_Mode = GP
2021-03-10 18:45:01
310
原创 DMA实验过程感想
第一步,使用DMA首先开DMA时钟DMA时钟挂载在APB总线上RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); //使能DMA1时钟第二步,初始化DMA结构体 u8 USART2_DMARX_BUF[USART_REC_LEN]; //串口2DMA接收缓冲,最大USART_REC_LEN个字节. DMA_InitTypeDef DMA_InitTypeDefUsart2; //DMA初始化 DMA_InitTy
2021-03-10 18:34:25
690
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人