stm8 Slave

2024-05-04 01:38
文章标签 stm8 slave

本文主要是介绍stm8 Slave,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

宏定义

#define SLAVE_ADDR 0x51
#define I2CSPEED 400000 //i2c速度
  • 1
  • 2
  • 3

stm8l051 i2c从机初始化

    /* I2C  clock Enable*/CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE);I2C_DeInit(I2C1);I2C_Init(I2C1, I2CSPEED, SLAVE_ADDR ,I2C_Mode_I2C, I2C_DutyCycle_2,I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);/* Enable Error Interrupt*/I2C_ITConfig(I2C1, (I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

stm8s103 i2c从机初始化

I2C_Init(I2CSPEED, SLAVE_ADDR , I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, I2CCLK);//I2C初始化
I2C_ITConfig(I2C1, (I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);
  • 1
  • 2

中断处理

{/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/
//接收发送Uchar temp = 0;if (I2C1->SR1&0x02)//地址已经匹配(读SR1,SR3清除该位){temp = I2C1->SR3&0x07;}else if ((I2C1->SR1&0x84)&&(I2C1->SR3&0x04))//数据字节传送完{temp = 0xA5;    //假设这里发送0xA5I2C1->DR = temp;}else if ((I2C1->SR1&0x40)&&(0 == (I2C1->SR3&0x04)))//接收时数据寄存器{temp = I2C1->DR;    //读取数据寄存器}else if (I2C1->SR1&0x10)//检测到停止位{I2C1->CR2 = I2C1->CR2;//清除停止位}//错误处理if (I2C1->SR2&0x01)//总线错误{I2C1->SR2 &= ~0x01;//清零}else if(I2C1->SR2&0x02)//仲裁失败{I2C1->SR2 &= ~0x02;//清零}else if(I2C1->SR2&0x04)//应答失败{I2C1->SR2 &= ~0x04;//清零}else if(I2C1->SR2&0x08)//上溢、下溢{I2C1->SR2 &= ~0x08;//清零}return;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

以上程序已长时间测试未发生过任何异常,所以他们说stm8的I2C存在硬件BUG应该是谣言。

这篇关于stm8 Slave的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958079

相关文章

redis被攻击redis READONLY You can‘t write against a read only slave.

redis 日志路径 /var/log/redis 拿下来后发现有这种错误 Operation now in progress 可能是网络断开导致, 查找redis whereis redis 修改 vim /etc/redis.conf 大概在300行 下面代码yes改no slave-read-only no 重启redis sudo systemctl restart

MySQL 主从幂等复制slave_exec_mode=IDEMPOTENT

MySQL slave_exec_mode 参数用于控制主从复制数据冲突时的处理策略,可选值有STRICT和IDEMPOTENT,分别代表严格模式和幂等模式,默认值为STRICT,该参数可动态调整。 原文地址: https://mytecdb.com/blogDetail.php?id=76 STRICT,严格模式IDEMPOTENT,幂等模式 默认STRICT模式下,从库复制过程中

Jenkins持续集成与部署动态工作节点生成之自定义jenkins-jnlp-slave容器镜像

0x00 前言简述 该镜像是Jenkins自定义jnlp容器模板,主要用于Jenkins工作节点容器化使用,以及Jenkins的Kubernetes集群中使用,以便动态生成工作节点,并在完成Job后自动销毁该Pod。 主要实现功能: 用户权限控制(sudo)ssh 远程连接git 代码版本控制docker 容器管理kubectl 集群管理Java 运行环境Maven 运行环境SonarQub

详解并掌握AXI4总线协议(四)、AXI4_FULL_SLAVE接口源码分析以及仿真验证

系列文章目录 详解并掌握AXI4总线协议(一)、AXI4-FULL接口介绍 详解并掌握AXI4总线协议(二)、AXI4_FULL_MASTER接口源码分析以及仿真验证 详解并掌握AXI4总线协议(三)、基于AXI4_FULL接口的BRAM读写仿真验证 文章目录 系列文章目录一、前言二、生成axi4_full_slave接口模板三、分析axi4_full_slave接口代码3.1 输入输出

Linux kernel-3.10 I2C 驱动程式之Slave

Linux kernel-3.10 I2C slave设备最简驱动程式 重要数据结构:        struct i2c_driver, struct i2c_client 重要i2c子系统API:  i2c_register_board_infor(&adap),  i2c_add_driver() static struct i2c_driver tpd_i2c_

IAR for STM8 学习笔记(1)--数据类型

数据类型(编译器支持 ISO/ANSI C 基本数据类型和一些附加数据类型) 1.1. 整型数据 bool 数据类型在C++语言里是默认支持的。如果你在C代码的头文件里包含stdbool.h, bool数据类型也可以使用在C语言里。也可以使用布尔值 false和 true。 1.2.浮点数据类型: 1.3.指针类型:指针有数据指针和函数指针

STM8 系列单片机命名规则

STM8 系列单片机命名规则 STM8 命名规则示列:STM8S005K6T6Cxxx 代表的意义为: 超值型 STM8 内核(可以理解为8 位51 增强型内核)MCU,LQFP-32 封 装,32KB FLASH 容量,温度范围-40℃-85℃;(工业级) 具体分解如下: 1.产品系列: STM8 单片机包括以下几个系列: STM8: 8 位MCU; STM8A:8 位自动MC

STM8单片机变频器设计

变频调速技术是现代电力传动技术的重要发展方向,而作为变频调速系统的核心—变频器的性能也越来越成为调速性能优劣的决定因素,除了变频器本身制造工艺的“先天”条件外,对变频器采用什么样的控制方式也是非常重要的。随着电力电子技术、微电子技术、计算机网络等高新技术的发展,变频器的控制方式今后将向数字控制变频器等方向发展。现在,变频器的控制方式用数字处理器可以实现比较复杂的运算,变频器数字化将是一个重要的发展

01-Jenkins安装并添加docker slave节点

目录 master节点**#1. 安装jdk****#2. 启动jenkins****#3. 配置向导****#4. 安装插件** slave节点**#1. 创建用户和组****#2. 生成密钥****#3. 启动ssh-slave容器并添加公钥信息****#4. 添加凭据****#5. 添加节点** master节点 master节点采用war方式安装。 #1. 安装jd

STM8内部EEPROM的使用详解

1 内存映射 STM8S105集成了多达1K的EEPROM(掉电数据不会丢失)最高可以支持30万次的擦写次数,用户可以将一些数据保存在EEPROM中,具体的memory map如下图所示; 在这里内存一页的大小为64 bytes(1 block), DATA EEPROM的内存地址映射如下图所示; 可以看到,EEPROM的起始地址为0x004000,结束地址为0x00427F,这个在