STM32F030系列实现仿位带操作
2017-08-26 17:26
204 查看
1、闲言
最近开发的时候,用到了STM32F030F4P6型号的单片机,它只有20个引脚,价格非常便宜,但是功能齐全;定时器、外部中断、串口、IIC、SPI、DMA和WWDG等等,应用尽有,非常适合用来做小设备。可是有个问题是,它是Cortex-M0内核的,不像M3,M4内核一样,可以支持位带操作(就是一位一位地操作,像80C51单片机一样),这就给程序移植或者开发带来了一点点小麻烦,因此我就利用C语言结构的位段操作,实现了个访位带操作,只是在效率可能会稍逊于真正的位带操作,但是代码上可以兼容,基本上可以应用于任何一款处理器。希望能够帮到大家。本文原文地址:http://www.cnblogs.com/endlesscoding/p/7429743.html,转载请说明出处。2、位带操作基本知识
关于真正的位带操作,网上有不少的资料,写得也很详细,在这里我只是简单说一下我的理解。另,不理解真正的位带操作,也不影响对本文的理解,因本文跟位带操作没有任何关系,只是仿仿罢了,不能当真。如果不想了解货真价实的位带操作,此节可直接忽略。如果不使用位带操作,我们操作一个次数据时,就要动32位(STM32是32位的),做一个不恰当的比喻,这就相当于我们坐在一辆有32节车厢的火车上,但是辆火车只有一个门,如果我们要查看这火车中乘客的信息,或者是乘客想下车,必须从那一个门进出,如下图1。
1 #ifndef __MYTYPE_H 2 #define __MYTYPE_H 3 #include "stm32f0xx.h" 4 5 #ifndef BIT 6 #define BIT(x) (1 << (x)) 7 #endif 8 9 #ifndef u8 10 #define u8 uint8_t 11 #endif 12 13 #ifndef u16 14 #define u16 uint16_t 15 #endif 16 17 #ifndef u32 18 #define u32 uint32_t 19 #endif 20 21 #ifndef NULL 22 #define NULL 0 23 #endif 24 25 /*------------------------------------------------------------------------------ 26 用户自定变量 27 功能描述:使用结构体的位段操作,可以实现位操作 28 作者:Endless 2017年8月13日18:32:37 29 修改:无 时间: 30 ------------------------------------------------------------------------------*/ 31 typedef struct _16_Bits_Struct 32 { 33 u16 bit0 : 1; 34 u16 bit1 : 1; 35 u16 bit2 : 1; 36 u16 bit3 : 1; 37 u16 bit4 : 1; 38 u16 bit5 : 1; 39 u16 bit6 : 1; 40 u16 bit7 : 1; 41 u16 bit8 : 1; 42 u16 bit9 : 1; 43 u16 bit10 : 1; 44 u16 bit11 : 1; 45 u16 bit12 : 1; 46 u16 bit13 : 1; 47 u16 bit14 : 1; 48 u16 bit15 : 1; 49 } Bits_16_TypeDef;
mytype.h
如果你想进行更多的位操作,只需多定义几次就行了,很容易的。到这里就差不多结束了,希望能够帮到大家,有什么问题可以联系我,或在下面留言。
总结
做技术也很不容易,希望我们大家一起坚持下去!!相关文章推荐
- STM32F030系列实现仿位带操作
- EXTJS学习系列提高篇:第十二篇(转载)作者殷良胜,利用Ext实现类似Windows的操作
- Python之虚拟机操作:利用VIX二次开发,实现自己的pyvix(系列一)成果展示和python实例
- MongoDB学习系列12:Java实现对MongoDB的AND、OR和IN操作
- 使用PreparedStatement实现查询操作系列一-----用户登录操作
- Java文件操作系列[1]——PDFBox实现分页提取PDF文本
- 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作
- android——框架的实现系列(数据库操作)
- 周志华《机器学习》课后习题解答系列(五):Ch4.4 - 编程实现CART算法与剪枝操作
- WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(中)
- 第13章 GPIO-位带操作—零死角玩转STM32-F429系列
- IT民工系列——c#操作开心网001,实现几乎所有SNS操作!
- WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(上)
- mybatis系列三:使用MyBatis实现持久化操作
- springMVC笔记系列(22)——Json各类操作在springMVC中的实现
- 【学习ios之路:UI系列】获取ios系统版本的相关操作. 及 将汉字转化为拼音功能实现
- STM8 IAR中实现类似 位带操作【兼容库函数】
- mongodb基础系列——java操作mongodb实现CURD
- 多种方法实现禁止文本框、文本的系列操作