完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、Ardunio IDE实现STM32的串口通信
一、I2C协议简介 2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件 实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛 地使用在系统内多个集成电路(IC)间的通讯。 1、 I2C物理层 I2C 通讯设备之间的常用连接方式见图 它的物理层有如下特点: (1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线 中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。 (2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步。 (3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之 间的访问。 (4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空 闲,都输出高阻态时,由上拉电阻把总线拉成高电平。 (5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用 总线。 (6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式 下可达 3.4Mbit/s,但目前大多 I 2C 设备尚不支持高速模式。 (7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。 2、I2C协议层 I2C 的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地 址广播等环节。 I2C 通讯过程的基本结构 二、软件I2C和硬件I2C (1)软件I2C 所谓软件模拟,即直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平。 如控制产生 I2C 的起始信号时,见图 24-5,先控制作为 SCL 线的 GPIO 引脚输出高电平, 然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制 SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。 (2)硬件I2C 硬件 I2C 是指直接利用 STM32 芯片中的硬件 I2C 外设,该硬件 I2C 外设跟 USART 串口外设类似,只要配置好对应的寄存器,外设就会产生标准串口协议的时序。使用它的 I2C 外设则可以方便地通过外设寄存器产生 I2C 协议方式的通讯,如初始化好 I2C 外设后, 只需要把某寄存器位置 1,那么外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号, 而不需要内核直接控制引脚的电平。 三、AHT20温湿度传感器的数据采集 (1)实验工具 ——温湿度传感器AHT20 ——单片机:STM32F103系列单片机(野火mini) (2)主要代码 main.c #include "led.h" #include "delay.h" #include "temhum.h" #include "sys.h" #include "usart.h" int main(void) { u32 CT_data[2]={0}; volatile float hum=0,tem=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 temphum_init(); //ATH20初始化 while(1) { AHT20_Read_CTdata(CT_data); //不经过CRC校验,直接读取AHT20的温度和湿度数据 hum = CT_data[0]*100*10/1024/1024; //计算得到湿度值(放大了10倍) tem = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍) printf("湿度:%.1f%%rn",(hum/10)); printf("温度:%.1f度rn",(tem/10)); printf("rn"); //延时2s,LED闪烁提示串口发送状态 LED=0; delay_ms(1000); LED=1; delay_ms(1000); } } (3)实验结果 四、参考资料 2、Ardunio IDE实现STM32的串口通信 安装Ardunio 将Arduino_STM32文件夹复制到hareware下: 打开软件,在工具中找到开发板,选择Generic STM32F103V series(指南者) 依次进行如下操作: CPU不管(默认72MHz) 之后连接到开发板: 1.USB线连接到"USB转串口"; 2.用黄色跳帽将BOOT0与3v3相连,BOOT1与GND相连,RXD与A9相连,TXD与A10相连; 将以下代码替换掉图中: 点击工具中选择串口; 再依次点击如图所示按钮: 再在工具中打开串口监视器: |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 07:11 , Processed in 0.645947 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号