本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CTS.每一层都有不同的协议所约束.在STM32中采用的USART就是其中之一. USART模块由GPIO_InitTypeDef结构体控制,它的定义如下 typedef struct { u32 USART_BaudRate; // 波特率 u16 USART_WordLength; // 字长 u1…
下面我们进行几个串口通信的实际应用. 实验一:发信实验,让开发板通过串口向电脑发送信息: #include <stdio.h> #include <stm32f10x.h> #include <led.h> #include <button.h> #include <systick.h> #include <time.h> #include <usart.h> int main() { NVIC_PriorityGroup…
本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进行嵌入式开发. 开发使用C语言,首先需要新建一个C语言文件,将其设为主函数的入口,因此,将此文件命名为main.c 配置好软硬件依赖环境后,在此文件中键入如下内容,尝试编译,如果能够编译成功说明环境配置成功. stm32f10x.h库的功能是提供对于stm32f10x系列开发板的所有功能的定义与实现,因此在头文件中要加一句. #include <stdio.h> #include &l…
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入设备的工作状态也有四类,模拟输入,浮空输入,下拉输入和上拉输入. 模拟输入就是输入一个波形,浮空输入指的是未按下按钮时,不确定此管脚的信号状态. 上拉输入指按下按钮时,输出低电平,即0,松开按钮时,输出高电平,即1. 下拉输入则相反. 但是因为STM32的构造问题,按钮只能采用上拉输入,如果将此管脚…
stm32F103RCT6提供5路串口.串口的使用,只要开启串口时钟,设置相应的I/O口的模式,然后配置下波特率.数据位长度.奇偶校验等信息,即可使用. 1.串口的配置步骤 ①串口时钟使能 APB2外设时钟使能寄存器(RCC_APB2ENR) 置1开启.清0关闭. 第14位对串口1的时钟使能 Eg:RCC->APB2ENR| = 1<<14; //使能串口1时钟 除串口1的时钟使能在RCC_APB2ENR寄存器,其余的时钟使能位在寄存器RCC_APB1ENR寄存器,而APB2(72M)的…
我们过去了解了用循环实现延时,或用系统滴答计时器实现延时,但这两种方法都有一种问题:会阻塞处理器的运行.下面我们学习一种不阻塞处理器运行其他事件的功能:时钟中断. 所谓中断,就是让处理器放下手头的事情,立刻去做一件事情,做完了再做原来的事情.比如说你在写作业,但是突然来了一个人找你说话,你就停下来跟他说话,这就是中断. 要实现时钟中断,我们必须了解两种特性:通用定时器和中断控制器. 通用定时器也是通过晶体产生脉冲信号用于定时的定时器,和滴答计时器(systick)的区别是通用定时器在外设上,滴答…
前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时. 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义如下 typedef struct { vu32 CTRL; vu32 LOAD; vu32 VAL; vuc32 CALIB; } SysTick_TypeDef; 四个成员分别意义是控制和状态,重装载值,当前值,校准值. 滴答计时器的原理很简单,就是利用系统时钟信号,每接到一个时钟信号计数器加一…
将所有的函数都堆在main.c文件里不是好的选择,庞大的代码文件会是你维护的障碍,明智的做法是,一种功能封装到一个库文件里. 库文件就是你代码开始部分写的#include<xxxx.h>里面的xxxx.h,让我们打开stdio.h文件看一看里面具体有什么内容. /* Copyright (c) 2002, 2005, 2007 Joerg Wunsch All rights reserved. Portions of documentation Copyright (c) 1990, 1991…
目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了(事实上这部分不属于嵌入式Linux的内容,所以只在本章节讲述下上位机实现的流程和思路,后续维护更新不在进行详细说明,不过下位机界面实现肯定还会涉及这些技术),上位机的界面方案一般指在Windows平台的软件界面开发,如UWP,WINFORM/C#, WPF/C#, QT/C++等,如果说我的个人倾向…
1.前言     Ardunio与计算机通信最常用的方式就是串口通信.在Arduino控制器上,串口都是位于Rx和Tx两个引脚,Arduino的USB口通过一个转换芯片与这两个串口引脚连接.该转换芯片会通过USB接口在计算机上虚拟出一个用于Arduino通信的串口.当你使用串口功能的时候,就意味着你不能引用串口引脚作为输入或者输出.     要想使串口与计算机通信,首先需要先启用串口功能,初始化Arduino的串口通信功能,也就是: Serial.begin(speed)     其中参数spe…