STM32—IIC通信(软件实现底层函数)】的更多相关文章

使用GPIO引脚模拟SDA和SCL总线实现软件模拟IIC通信,IIC的具体通信协议层和物理层链接:IIC #ifndef __BSP_IIC_H #define __BSP_IIC_H #include "stm32f10x.h" #define SCL_PORT GPIOA #define SCL_PIN GPIO_Pin_2 #define SCL_MOOD GPIO_Mode_Out_OD #define SCL_SPEED GPIO_Speed_50MHz #define SD…
半双工通信模式:以字节模式发送(8位): 两线式串行总线,SDA(数据信号)和SCL(时钟信号)两条信号线都为高电平时,总线为空闲状态:起始时,SCL稳定为高电平,SDA电平由高向低跳变:停止时,SCL高电平,SDA电平由低向高跳变:(起始,终止信号都是电平的跳变信号): 传送过程:主机起始信号-->控制总线-->发送地址字节(7位地址码+一位R/W(读/写))-->从机返回AKC信号-->传送数据(8位)(第九位返回应答信号或非应答信号)-->停止信号 注意点: 1.进行数…
参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HAL库的硬件IIC要比标准库的稳定.好了,下面就从STM32CubeMx 配置开始一步步实现IIC通讯. STM32CubeMx的配置,这里关于新建工程的步骤我就不细说了,如果还不会操作STM32CubeMx 的可以点击查看, 这里主要对IIC的配置进行说明. 了解IIC的都知道,IIC通信有主从机之…
引言 PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入.一个输出和一个串行I2C 总线接口.3 个地址引脚A0.A1 和A2 用于编程硬件地址,允许将最多8 个器件连接至I2C总线而不需要额外硬件.PCF8591由于其使用的简单方便和集成度高,在单片机应用系统中得到了广泛的应用,这篇文章是介绍IIC通信在ADDA转换芯片PCF8591中的应用. 关于IIC IIC总线通信协议的介绍在"基于51单片机IIC通信的AT24C02学习笔记"有详细的介绍. 关于…
引言 最近在学习几种串行通信协议,感觉收获很多,这篇文章是学习IIC总线协议的第一篇文章,以后还会再写一篇关于PCF8591 IIC通信的ADDA转换芯片的文章. 关于IIC总线 IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单.双向.二线制.同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源.主要…
Stm32串口通信(UART) 串口通信的分类 串口通信三种传递方式 串口通信的通信方式 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束.其每帧的格式如下: 在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1.用这种格式表示字符,则字符能一个接一个地传送. 在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率.字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义.原则上字符格…
STM32串口通信UART使用 uart使用的过程为: 1. 使能GPIO口和UART对应的总线时钟 2. 配置GPIO口的输出模式 3. 配置uart口相关的基本信息 4. 使能uart口的相关的中断,如接收中断.空闲中断等 5. 编写中断接收函数 配置对应的GPIO口 对于STM32F4_Discovery开发板而言共有五个,选择UART5作为实验串口,其对应的IO口为PC12.PD2. UART5_TX: PC12 UART5_RX: PD2 首先需要将对应的GPIO口配置为复用功能,如下…
Socket通信是Java网络编程中比较基础的部分,其原理其实就是源ip,源端口和目的ip,目的端口组成的套接字通信.其底层还设及到了TCP协议的通信. Java中的Socket通信可以通过客户端的Socket与服务端的ServerSocket通信,同时利用IO流传递数据,也就是说Socket通信是面向流的使用的是BIO,并不同于后来的NIO通信面向缓冲.Socket通信中使用的IO流的read,readline等函数都是阻塞的,这就导致了在通信过程中,双方不能确定什么时侯是流的结束,针对这种可…
源:STM32 对内部FLASH读写接口函数 因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中,然后在RAM中改动,然后擦除整页FLASH,再把改动后的内容写入原Flash页.下面程序调试通过. /***************************************************************************…
STM32串口通信如果使用奇偶校验,需要设置数据位长度为9bit USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Odd; USART_…
Redis底层函数详解 serverCron 函数 它负责管理服务器的资源,并维持服务器的正常运行.在执行 serverCron 函数的过程中会调用相关的子函数,如 trackOperationsPerSecond.SigtermHandler.clientsCron.databasesCron 等函数.默认情况下,每隔 100 毫秒执行一次 serverCron 函数 trackOperationsPerSecond 函数 是 serverCron 函数的一个子函数.采用抽样计算的方式,计算并…
1.IIC协议简易概述 IIC全称Inter-Integrated Circuit (集成电路总线),是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备.IIC属于半双工同步通信方式. 特点 简单性和有效性. 由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降 低了互联成本.总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件. 多主控(multimastering) 其中任何能够进行发送和接收的…
关于IIC我觉这个博客里面说的已经够清楚了 如下图所示的写操作的时序图: 其实像这种通信协议的要求是很精确的,一点点不对都可能导致在实际工程中无法读取数据.我就是被一个应答位耽误了好久,还好最后被我发现了.虽然程序不长,但是每一句话都是值得我们认真学习的,下面是我自己结合网上还有书中的程序综合的,亲测可用.最后用keil的逻辑分析仪测试了iic端口输出的波形. iic.h #ifndef __IIC_H #define __IIC_H #include <reg52.h> #include &…
大家可以使用压缩包中的UsbApp.exe调试本软件idVendor为:0483  idProduct为5750. 今天太晚了,明天还要上半天班,上位机软件找个时间在写一篇文章.请关注我的博客.压缩包中附带了几个编译软件典型的上位机源代码,大家可以参考下. 本文中源程序的下载网址为:http://download.csdn.net/source/2918553 很久没写过文章了,趁今晚有空出来露一下.最近发现很多人对STM32的USB通信很感兴趣.要将USB的通信协议搞懂确实是一个比较漫长的过程…
对于STM32的32位CRC,如果假定它的一个主要目的是为了校验往内部FLASH存储数据的可靠性,那么(余数)初值是全1当然是比较合理的.由于STM32的32位CRC是纯32位,即每次必须输入32位的数,所以如果数据不到32位,应该往低位用1来填充比较合理: 另外,如果输入数据是 "1234"-0x31 0x32 0x33 0x34, 那么输入的CRC数据是 0011-0100 0011-0011 0011-0010 0011-0001 :: 0x34333231 由于STM32的32…
linux socket编程之TCP与UDP   TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端. UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地.由于UDP在传输数据报前不用在客户…
第一次深入学习stm32,花了好长时间才看懂代码(主要是C语言学习不够深入),又花了段时间自己敲了一遍,然后比对教程,了解了利用中断来串口通信的设置方法. 板子是探索版f407,本实验工程把正点原子库函数工程模版拿来使用,自己主要敲了一下main.c.usart.h和.c文件. 一.头文件usart.h #ifndef __USART_H //定义同时防止重复定义 #define __USART_H #include "stdio.h" #include "stm32f4xx…
本文提到的内容有以下几个方面: 通信概述 串口通信 I2C通信 CAN通信 SPI通信 I2S通信 USB通信 其他通信 一.通信概述 按照数据传送方式分: 串行通信(一条数据线.适合远距离传输.控制较复杂) 并行通信(多条数据线.成本高.抗干扰性差) 按照通信的数据同步方式分: 异步通信(以1个字符为1帧.发送与接收时钟不一致) 同步通信(位同步.时钟一致) 按照数据的传输方向分: 单工(只能往一个方向传播) 半双工(数据传输可以沿两个方向,但是需要分时) 全双工(同时双向传输) 通信速率通常…
CAN协议特点 1.多主控制 所有单元都可以发送消息,根据标识符(Identifier简称ID)决定优先级.仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作 2.系统的柔软性 与总线相连的单元没有类似于"地址"的信息.因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变 3.通信速度较快,通信距离远 最高 1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps) 4.具有错误检测.错误通知和错误恢复功能 所…
一.串口一的配置(初始化+中断配置+中断接收函数) 1 /*=============================================================================== 2 Copyright: 3 Version: 4 Author: 5 Date: 2017/11/3 6 Description: 7 配置独立看门狗初始化函数,在主函数中运行IWDG_ReloadCounter进行喂狗主函数必须在4s内进行一次喂狗不然系统会复位; 8 函数功…
>_<:学习贴图[bmp图]:首先找一张bmp格式的图片,然后下载uC-BmpCvt软件,打开改图片 >_<:然后点击Image-Conver-Into-Best Palatte调成最佳调色板,然后save格式为默认格式: >_<:结果生成了一个kk.c文件: 这里Colorskk[]是16个颜色; Palkk是根据上面的16个颜色构建对应的调色板; ackk[]为Bmp图的内容; bmkk为根据上面的调色板,bmp内容建立uc-gui的函数可以调用的图片格式,在Fun…
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数   GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 <2>GCD的使用 GCD的使用就2个步骤 定制任务 确定想做的事情…
使用的是STM32f103ZET6. 1.把文件main.c和usart.c中的所有usart1换成usart2 2.查看手册得知USART2的引脚是Tx->PA2,Rx->PA3,改变usart.c文件GPIO设置. 3. Error: L6218E: Undefined symbol UART_INIT (referred from main.o). Not enough information to list image symbols. 解决办法:在usart.h文件里#define…
IIC 通用文件,文件是在NRF51xx 芯片基础,keil 平台开发测试通过,后期修改为STM32F2xx系列的配置. 文件百度云盘链接 : https://pan.baidu.com/s/1AFxanwzrAViaubtERZMRsA 注意:在用于STM32Fx 系列时注意引脚读取函数的选择! 下面是示波器现实,IIC通讯读的操作. 理论基础: SCL为高,SDA发生变化,即为发生了特殊状态(ACK, NACK, START, STOP) SCL为低,SDA发生变化,即为数据端发生跳变,这个…
1. 中断说明 TXE(Tansmit Data Register empty interrupt) - 发送数据寄存器空,产生中断.当使能TXE后,只要Tx DR空了,就会产生中断.---写寄存器DR清零 TC(Transmission Complete interrupt) - 发送一个字节后才进入中断.---读/写寄存器DR清零,也可软件手动清零 RXNE(Receive Data register not empty interrupt)- 每接受到一个字节产生中断,接受寄存器不为空时,…
/* * 函数名:Key_GPIO_Config * 描述 :配置按键用到的I/O口 * 输入 :无 * 输出 :无 */ void Key_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /*开启按键端口(PB0)的时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_Ini…
最近在STM32上开发CAN通信相关内容,转载一篇个人认为不错的文章,看完了基本算明白了,能够实际操作了. 原文地址:  https://blog.csdn.net/ludaoyi88/article/details/53350077?utm_source=itdadao&utm_medium=referral 另一篇:https://wenku.baidu.com/view/1a1e02e977eeaeaad1f34693daef5ef7bb0d124f.html 参见其中的结构框图,理解3个…
基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提到了SendQ和RecvQ缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际内存大小会动态地增长和收缩,但还是需要一个硬性的限制,以防止行为异常的程序所控制的单一TCP连接将系统的内存全部消耗.正式由于缓冲区的容量有限,它们可能会被填满,事实也正是如此,如果与TCP的流量控制…
今天在看stm32的中断,一时间不理解stm32主函数是如何进入中断函数的,按C编程的理解,会有个特定的入口之类的,但是看demo过程中没有发现入口. 以串口中断服务函数void USART1_IRQHandler(void) 为例,首先用到串口中断,需要先设定串口中断初始化以及串口初始化,另外void USART1_IRQHandler(void) 中断服务函数也应该写好. 发现在stm32的启动文件startup_stm32f10x_md.s中写到  DCD USART1_IRQHandle…
STM32单片机可以通过以下代码实现重启(core_cm3.h).同时如果利用AT命令进行无线通讯,服务器后台和客户端之间用MODBUS通讯即4G+MODBUS RTU,可以利用F05写单个线圈的方法结合软件重启实现远程MCU重启 if (IO_OUT0) { delay_ms(); __set_FAULTMASK(); NVIC_SystemReset(); //关闭所有中断,系统复位; } __STATIC_INLINE void NVIC_SystemReset(void) { __DSB…