玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】
本文介绍X-CTR100控制器基础板载资源的使用,包括LED、蜂鸣器、拨码开关、USB串口、软件定时、位带操作等。
原理
针对X-CTR100控制器的基础操作,均包含在X工程模板的ax_basis文件中,后续例程都包含该文件,方便使用X-CTR100控制器基础资源。
本文包含过个例程,原理详见下文例程。
软件生态
X-SOFT软件生态,X-API文件如下。
ax_basis.c——X-CTR100板载基础资源操作源文件
ax_basis.h——X-CTR100板载基础资源操作头文件
下文例程接口函数均包含在上述文件中,接口函数如下:
void AX_Init(uint32_t baud); //X-CTR100初始化 //X-CTR100 LED操作函数宏定义 #define #define #define #define #define #define
//X-CTR100 蜂鸣器操作函数宏定义 #define #define #define
//X-CTR100 获取拨码开关状态函数 uint8_t AX_SW_GetSW12Status(void); //SW获得选择状态 uint8_t AX_SW_GetSW1Status(void); //SW1获得选择状态 uint8_t AX_SW_GetSW2Status(void); //SW2获得选择状态
//X-CTR100 软件延时函数 void AX_Delayus(__IO uint16_t us); //软件微妙延时 void AX_Delayms(__IO uint16_t ms); //软件毫秒延时 |
其中AX_Init()函数完成LED、蜂鸣器、串口1、拨码开关、滴答时钟的初始化。
例程 l Printf&Scanf例程
printf()和scanf()函数是C语音重要的格式化输入输出函数,一般用于信息数据的输入输出,同样X-CTR100也使用两个函数进行信息和数据的输入输出操作,方便进行功能调试和验证。
本例程实现printf()和scanf()输入输出操作。
硬件说明
硬件资源:
- 串口UART1
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
printf()和scanf()是C语言标准库函数,定义在stdio.h文件中。例程使用MDK软件提供微库,使用时需要勾选MDK工程选项"Use MicroLIB",参考下图。
为了实现通过UART1进行信息输入输出,在ax_basis.c文件重定义fputc()和fgetc()函数,具体参考程序源码,printf()和scanf()输入输出格式说明请参考C语言相关书籍。
主程序,首先调用AX_Init()函数初始化X-CTR100控制器,AX_Init()函数包含UART1初始化,波特率设置为115200。进入while循环,首先打印提示信息,通过scanf()输入数值到x变量,并通过printf()函数输出x变量内容。
int main(void) { int32_t tmp;
/* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 Printf & Scanf例程***\r\n\r\n");
//X-API测试:Printf & Scanf测试 printf("*Printf & Scanf测试\r\n");
while (1) { printf("请输入范围0~1000的正整数X="); scanf("%d", &tmp); printf(" %d\r\n", tmp); } } |
实现效果
打开X-Assistant软件,选择对应串口,并保持默认串口参数设置(后续例程操作相同,不再重复描述)。根据提示,在发送窗口输入0~1000范围的数值,并按"发送"按钮,接收窗口显示对应的数值。以上操作循环执行,运行效果如下图所示。
例程 l LED例程
X-CTR100具有两个可编程LED灯,一个红色、一个绿色,通过控制LED灯亮灭可用于功能及程序状态指示。
本例程控制2个LED点亮、熄灭、翻转操作。
硬件说明
硬件资源:
- 串口UART1
- 板载LEDR、LEDG
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
主程序。
int main(void) { /* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 LED例程***\r\n\r\n");
//X-API测试:红色、绿色LED交替闪烁 printf("*LED测试\r\n"); printf("*红色、绿色LED交替闪烁\r\n");
AX_LEDG_On(); //绿色LED点亮 AX_LEDR_Off(); //红色LED熄灭
while (1) { AX_Delayms(100); //延时100ms AX_LEDG_Toggle(); //绿色LED翻转 AX_LEDR_Toggle(); //红色LED翻转 } } |
实现效果
程序实现红绿LED交替闪烁效果。
例程 l 蜂鸣器例程
X-CTR100具有一个可编程有源蜂鸣器,通过GPIO高低电平控制,可用于声音提示、报警、音乐等功能。本例程控制蜂鸣器鸣叫、不叫和状态翻转。
硬件说明
硬件资源:
- 串口UART1
- 板载蜂鸣器
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
主程序。
int main(void) { /* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 蜂鸣器例程***\r\n\r\n");
//X-API测试:蜂鸣器鸣叫 printf("*蜂鸣器测试\r\n"); printf("*蜂鸣器长响1S后间隔鸣叫\r\n"); AX_BEEP_On(); AX_Delayms(1000); AX_BEEP_Off(); AX_Delayms(500);
while (1) { AX_Delayms(100); AX_BEEP_Toggle(); } } |
实现效果
实现了蜂鸣器长响1S后间隔鸣叫,鸣叫频率5Hz。
例程 l 拨码开关例程
X-CTR100具有一个两位拨码开关,通过GPIO输入采集拨码开关状态,可用于参数设置、状态转换、分支选择等功能。
本例程获取SW1、SW2编码器状态,并将获取的状态printf输出。
硬件说明
硬件资源:
- 串口UART1
- 板载拨码开关
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
程序首先分别获取拨码开关SW1、SW2状态,然后在while循环中进行拨码开关状态循环检测,如果拨码开关状态有更新,则通过串口输出拨码开关更新后的状态。
int main(void) { int32_t tmp;
/* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 拨码开关例程***\r\n\r\n");
//X-API测试:获取拨码开关SW1 SW2状态 printf("*拨码开关测试\r\n");
//获取拨码开关SW1状态 if (AX_SW_GetSW1Status()) printf("*拨码开关SW1=1,开关在ON侧\r\n"); else printf("*拨码开关SW1=0,开关在ON对侧\r\n");
//获取拨码开关SW2状态 if (AX_SW_GetSW2Status()) printf("*拨码开关SW2=1,开关在ON侧\r\n"); else printf("*拨码开关SW2=0,开关在ON对侧\r\n");
while (1) { //获取拨码开关总状态,并判断是否发生变换 if (AX_SW_GetSW12Status() != tmp) { tmp = AX_SW_GetSW12Status(); printf("*拨码开关当前状态%d \r\n", tmp); } AX_Delayms(100); } } |
实现效果
运行效果如下图所示,可手动调整拨码开关状态,观察程序输出显示情况。
例程 l GPIO位带操作例程
51单片机相信各位都用过,假设P1.1的IO口上挂了一个LED,那么你单独对LED的操作就是P1.1 = 0或P1.1 = 1,注意,是你可以单独的对P1端的第一个IO口进行操作,然而STM32是不允许这样做的,那么为了像51单片机一样能够单独的对某个端的某一个IO单独操作,就引入了位带操作这样的概念,简单说就是为了去单独操作32里面PA端的第1个IO口,所以才有了位带这样的操作机制。
位带操作就是把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说GPIO的ODR寄存器有32个位,那么可以映射到32个地址上,我们去问这32个地址就达到访问32个比特的目的。这样我们往某个地址写1 就达到往对应比特位写1 的目的,同样往某个地址写0 就达到往对应的比特位写0 的目的。
通过位带操作实现了GPIO的输入输出操作,利用SW拨码开关控制LED灯的开关。
硬件说明
硬件资源:
- 串口UART1
- 板载LEDR、LEDG
- 板载拨码开关
硬件连接:
使用MicroUSB数据线连接X-CTR100 COM接口。
软件说明
位带相关操作宏定义,在ax_basis.h文件中。
//IO口操作宏定义 #define #define #define
//IO口地址映射 #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define
//IO口操作 #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define |
软件通过主程序实现AX_Init()函数已完成IO口初始化,SW和LED灯接口位带定义如下。
//LED端口定义 #define #define
//SW拨码开关端口定义 #define #define |
主程序代码。
int main(void) { /* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 位带操作GPIO例程***\r\n\r\n");
//位带控制LED输出 GPIO_LED_G = 0; GPIO_LED_R = 0; AX_Delayms(500); GPIO_LED_G = 1; GPIO_LED_R = 1; AX_Delayms(500);
//循环检测,通过拨码开关控制LED while (1) { //获取拨码开关1状态,控制LED绿灯 if (GPIO_SW1 == 1) GPIO_LED_G = 1; else GPIO_LED_G = 0;
//获取拨码开关2状态,控制LED红灯 if (GPIO_SW2 == 1) GPIO_LED_R = 1; else GPIO_LED_R = 0;
AX_Delayms(200); } } |
实现效果
拨动SW1控制绿色LED灯亮灭,拨动SW2控制红色LED灯。
总结
通过本文学习,可以轻松掌握X-CTR100控制器基础板载资源LED、蜂鸣器、拨码开关、USB串口、位带操作、定时器的使用。
后续生态及例程,将以ax_basis为基础,会频繁使用这些基础X-API,请大家务必了解。
玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作的更多相关文章
- 玩转X-CTR100 | STM32F4 l GPIO位带操作
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- 玩转X-CTR100 l STM32F4 l UCOS-III移植
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台 ...
- 玩转X-CTR100 l STM32F4 l ESP8266串口WIFI模块
我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]- ESP8266是一款非常火的WIFI模块,性价 ...
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
随机推荐
- 【修改帐号信息】Eclipse中修改SVN用户名和密码方法
由于在svn 的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案: 在Eclipse 使用SVN 的过程中大多数人往往习惯把访问SVN 的用 ...
- spring boot 启动后执行初始化方法
http://blog.csdn.net/catoop/article/details/50501710 1.创建实现接口 CommandLineRunner 的类 package org.sprin ...
- 01_Spark基础
1.1.Spark Ecosystem BlinkDB: 允许用户定义一个错误范围,BlinkDB将在用户给定的错误范围内,尽可能快的提供查询结果 1.2.Spark愿景 1.3.Spark简介 1) ...
- 机器学习-数据可视化神器matplotlib学习之路(五)
这次准备做一下pandas在画图中的应用,要做数据分析的话这个更为实用,本次要用到的数据是pthon机器学习库sklearn中一组叫iris花的数据,里面组要有4个特征,分别是萼片长度.萼片宽度.花瓣 ...
- Mui --- 页面之间的传值
A页面 mui.ajax('http://14.50.2.49:80/default/AppLogin?Prm=' + Prm, { data: {}, //dataType: 'json', typ ...
- 机器学习 MLIA学习笔记(一)
监督学习(supervised learning):叫监督学习的原因是因为我们告诉了算法,我们想要预测什么.所谓监督,其实就是我们的意愿是否能直接作用于预测结果.典型代表:分类(classificat ...
- Thunder团队Final版爱阅app发布视频
视频链接:https://www.bilibili.com/video/av17008792/ 视频简介:首先出现的是我们团队的logo,接着是Final版爱阅app的功能展示,紧接着是我们团队的开发 ...
- Flutter学习笔记(一)
记得flutter出来的时候,官方推荐的是使用IntelliJ IDEA,当时个人尝试了一下,比较麻烦,整个过程比较漫长. 进入2018年,再去看的时候,官方推荐使用Android Studio和VS ...
- RabbitMQ入门_14_Policies
参考资料:https://www.rabbitmq.com/parameters.html#policies A. Policies 的用途 RabbitMQ 有很多可选参数(x-arguments) ...
- 终于用ADB连上平板了
可以看到设备管理器里, ADB Interface 设备装不上驱动. 1,百度到的内容,没有一个靠谱的. 2,google到内容了, 却因为看的不仔细,浪费了好多时间...(android自己的文章都 ...