单片机
文章平均质量分 76
a_happy_ant
这个作者很懒,什么都没留下…
展开
-
QSPI DSPI SPI超级详细的讲解,友好的讲解。
外扩的flash接口一般都是SPI(与片上flash不一样,片上flash理解为在已经集成在芯片内部了,集成在芯片内部的flash就一般不存在SPI接口说法了,都是通过总线进行数据的交换。而外扩的flash是理解为硬盘就可以了)。因此外扩的flash一般也说是spi-flash。SPI是什么?网上说SPI DSPI QSPI有几根数据线什么,对新手来说谁特么听的懂啊。直接不多说,上图讲解:GD25Q16BS为一款FLASH,这个不重要,重要的是接口的8根线。下面逐一讲解:CS:片选信号,这个不用原创 2021-12-10 10:46:55 · 13507 阅读 · 3 评论 -
基于兆易创新GD32F450IK芯片的流水灯程序,详解,对入门童鞋友好的讲解
介绍: 采用的芯片是GD32F450IK,芯片厂商为兆易创新,开发板是厂商寄过来的。采用的是keil5.25.代码例程是在兆易创新官网下载的,链接如下。http://gd32mcu.com/cn/download/0?kw=GD32F4代码例程图片如下:不多说,直接上代码讲解。int main(void){ /* configure systick */ systick_config(); /* enable the LEDs GPIO clock */原创 2021-12-07 15:53:51 · 2354 阅读 · 2 评论 -
基于GD32F450芯片的IIC读写EEPROM详解,写篇
本文采用的是GD32F450芯片,基于此芯片的官网例程来对IIC读写EEPROM进行详解。对于初学者来说,感觉IIC很复杂,时许逻辑很绕,无从下手。感觉很多概念不理解,但是不要慌,此文给你详解。上来不多说,直接贴代码!void eeprom_page_write(uint8_t* p_buffer, uint8_t write_address, uint8_t number_of_byte){ /* wait until I2C bus is idle */ while(i2c_fl原创 2021-12-02 15:00:20 · 4499 阅读 · 3 评论 -
STM32 HAL库串口回调机制详解
在开始学习STM32的时候,会发现,怎么有个串口中断回调和串口中断不一样的概念啊,感觉很头晕,找了很久也没发现到底区别在哪儿,回调机制是怎么实现的。下面就详解一下:通过STM32CubeMx配置工程,生成代码,这一步就不操作了,读者自己熟悉吧。在stm32h7xx_it.c保存着所有外设的中断入口函数,我们需要在这里添加UART2的重点函数。函数不需要声明,HAL库已经声明过了。所以当中断发生后,程序会通过USART2_IRQHandler函数进入到HAL_UART_IRQHandler中断处理函数。原创 2021-10-29 15:55:56 · 12142 阅读 · 5 评论 -
STM32 FDCAN通信,发射部分详解。
前言在CAN专属的消息RAM中,存在32个TX缓冲区,32个TX事件FIFO。每个里面都存在1个元素,一共有64个元素,对应64个报文。TX缓冲区每一个TX缓冲区可以配置一个ID,即对应一个报文。缓冲区内不仅仅只有报文的内容,还有报文的类型、ID等相关信息,官方定义这样一个整体叫element,叫元素。下面是每个元素都有什么内容。(1) 位 ESI:当检测到错误时是否将发送错误标志。(2) 位 XTD:决定接受 ID 的位数是 11 位还是 29 位。1 表示 29 位扩展格式的 ID,0 表原创 2021-10-29 14:06:22 · 3941 阅读 · 0 评论 -
STM32 ADC的连续,扫描模式的含义
ADC单通道:要求进行一次ADC转换:配置为单次模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,就停止转换。要求进行连续ADC转换:配置为连续模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,接着进行下一次转换,不断连续。ADC多通道:必须是扫描模式要求进行一次ADC转换:配置为单次模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。要求进行连续ADC转换:配置为连续模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,接原创 2021-10-18 16:46:02 · 1515 阅读 · 0 评论 -
C语言typedef函数指针用法
1.简单的函数指针的应用形式1:返回类型(*函数名)(参数表)char (*pFun)(int);char glFun(int a){ return;}void main(){pFun = glFun;(*pFun)(2);} 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。 第二行定义了一个函数glFun()。原创 2021-10-13 09:54:45 · 2109 阅读 · 0 评论 -
基于STM32的freertos实时系统,双线程参考实例
上回说到我的任务1不见了,只有任务2,这次要找它出来!上篇链接:https://blog.csdn.net/a_happy_ant/article/details/120719576?spm=1001.2014.3001.5501找出来的方式有很多种,先说说抢占式调度(CubeMx默认设置是这个)一、抢占式调度还是先来看看osThreadDef的定义:上一章我们大概清楚了第一个参数 name 的作用,os_thread_def_##name 是声明了一个变量,#name是把这么宏参数变为字符串,原创 2021-10-12 11:17:25 · 1093 阅读 · 1 评论 -
STM32CubeMx移植freertos系统,简单的双线程工作
对于初学者,只需要知其然就可以,不需要深究底层逻辑。等用熟了,有些概念了,再来深究会好很多。使用CubeMx 移植FreeRTOS,比较简单。一、新建工程只需要把这里勾上就OK了,其它都是常规配置,记得把时钟配置上,我这里添加了一个串口,用于测试演示,LED都懒得配置了。(不同版本的cubemx界面可能有些不同,这里不一一展示,直接添加freertos,软件版本选择cmsis v1即可)直接点击生成,发现有警告:是说FreeRTOS和HAL库的时钟源由冲突,然后强烈建议我们把时钟源改为其它的,既原创 2021-10-12 11:12:41 · 1381 阅读 · 0 评论 -
C语言strlen与sizeof的区别详解
strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)。其原型如下面的代码所示:size_t strlen(char const* str);也正因为 strlen 是一个函数,所以需要进行一次函数调用,调用示例如下面的代码所示:char sArr[] = “ILOVEC”;/用strlen()求长度/printf(“sArr的长度=%d\n”, strlen(sArr));很显然,上面示例代码的运行结果为 6(因为不包括结束字符 null)。这里需原创 2021-09-17 16:46:58 · 194 阅读 · 0 评论 -
I2C时序
I2C时序理解欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo原创 2021-09-10 10:48:21 · 6479 阅读 · 0 评论