Blog's Home

越努力,越幸运!

STM32——库函数分析:GPIO相关

个人觉得,今天要说的这个内容,还是有点儿技术含量。在分析代码之前,先谈点感想,我是不得不佩服写出这些代码的前辈(真乃神人也!),我只是理解这些代码就痛苦不堪,差点儿还放弃了,这些前辈却能够自己想出这些代码,我真的是佩服的五体投地。前辈在上,请接受我万分的景仰。

以下库函数均来自于STM32F1系列控制器的外设函数库。

DS18B20应用总结

这个本应该是刚学单片机的时候就接触的东西,可是我却是在大三的时候才来接触它,要不是可能会用到,也许我还是不会去认识它,这说明我的学习不够认真,也不够到位,很基础的外设模块现在才来学习。

一、引脚排列:平的一面对着自己,从左到右分别是1——GND,2——DQ,3——VCC,在画电路时VCC与DQ之间要接上拉电阻,不然可能会烧坏器件。

PWM的产生——软件模拟法

在没有硬件PWM模块时,如果要用到PWM,那我们就只能通过软件法来模拟硬件模块产生PWM信号。本文讲述是的如何通过软件法来产生一个频率固定、占空比可变的PWM信号

首先,我们要确定单片机的晶振频率,因为要用到定时器,所以第二步要配置定时器计数的时钟周期,第三步就是确定PWM周期是多少,做完了这几点,那么PWM的频率(周期也是)就固定了,频率值计算如下:

通信协议的制订及多字节协议的接收处理

所谓通信,就是指两个或是多个对象之间进行交流。而不同的对象之间交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是我下面要讲的通信协议。

制订通信协议的目的就是为了能够准确、可靠、有效的通信,从而使各个设备协同工作,成为一个系统,实现设计人员所需要的功能。言归正传,下面我们来谈如何制订通信协议及如何准确的接收数据。

趣味数学——算题求解

求解:

1、2、3、4、5、6、7、8

() -  () = 1

() + () = 9

学习总结

一、经验总结:

1、最好的参考资料就是《用户指南》与《数据手册》。

2、必须要事先确立好整个工程的框架。一定要在脑海中有整个系统的框架,没有框架会耗费你大量的时间,框架确立好了,那么后面的事情就是具体的实现,往框架里填代码,添加功能。所以,系统的整体框架是非常重要的。

数据结构-内排序

根据待排序的记录是否全部被放置在内存中,排序可分为:内排序和外排序。

内排序是指在排序过程中,待排序记录全部被放置在内存中。外排序是由于排序记录数量太多,不能同时放置在内存,排序过程需要在内外存之间多次交换数据才能进行。

这里主要来谈一下内排序中的几种。

首先我们先要有一个用于排序用的顺序表结构体,如下:

#define MAXSIZE 10         //用于要排序数组元素个数的最大值,可根据需要修改    
typedef struct    
{
    int r[MAXSIZE + 1];    //用于存储被排序数据的数组,r[0]用作哨兵或临时变量
    int length;            //用于记录顺序表的长度
}SqList;                   //结构体定义

/*交换元素函数,经常用到*/
void swap(SqList *L, int i, int j)
{
    int temp = L->r[i];        //中间变量
    L->r[i] = L->r[j];
    L->r[j] = temp;
}

1、冒泡排序(Bubble Sort)

数据结构-认识算法

如果要你写个程序计算 1+2+3+...+99+100,你会怎么写?

这还不容易,对于我而言,毫不迟疑的做法就是用循环呗,大家来看:

int i,sum = 0;
int n = 100;
for(i = 1;i <= n;i++)
{
    sum = sum + i;
}

有没有其他更为简洁的方法呢?当然有,请看下面:

显示与按键技术总结

1、数码管闪烁

使用工具:两个定时器T0、T1(以51核为例)

实现方法:T0用作数码管正常显示,T1用于控制数码管闪烁。

具体说明:T0定时时间为1ms,在其中断里进行段位选控制;T1由按键控制打开,闪烁按键按下,开T1,定时时间64ms(可修改),闪烁控制为修改其段码,涉及到一点小算法原理。

duanxuan_mid_2[bit_6] = (duanxuan_sml[bit_6] - duanxuan_mid_2[bit_6]); //闪烁处理,改变对应段码

算法原理:如果你想控制一个数的更改,如第1次为3,第2次为9,第3次为3...,如此循环,那么,取这两数之和,即 3 + 9 = 12 ,然后在定时器里,编写代码,i = 12 - i;    其中i为每次进入定时器修改的值,它每进入一次定时器就会改变,设i初值为3,则依次变换为9,3,9,3...,利用这个原理,就可以实现闪烁,即我们用“当前数值段码”与“灭”的段码相加,得到一个“常数”,然后在定时器里用“常数” - "当前数值段码" = result,然后把这个result赋给存储段码的变量,并送显示,这时就会灭了,而下一次就会亮,当然,这里的下一次的“当前数值段码”就是result的值了,如此亮灭亮灭...,就实现了闪烁功能,闪烁间隔为T1定时时间。

2015暑期总结

总的来说,这个暑期还是有所收获的,至少比14年的暑期做的要好,因为这个暑假至少每天都有在努力学习。

其一是stm32。最开始几天弄的是f103的板子,后来弄的是f407,所以这里主要只讲下407。就我自己的感觉而言,基本上学会了的就只GPIO、AD/DA、定时器,当然,这还只是基本的应用,深入的肯定不行,而其他的差不多都没接触。GPIO的话,像LED灯、按键这些都没问题;AD/DA这里,可以进行程控电压输出,然后中间花了几天的时间写了那个波形产生的程序:调频、调幅、长短按键这些都有,基本上这个程序就是暑假写的综合度最高的程序了,包含了GPIO、AD/DA、定时器与中断这些,当然还有一些其他的模块调用什么的。总体而言,我对自己的评价就是:这个暑假入了STM32的门!离高手这个目标还非常遥远。

«234567891011»
欢迎来到黄建雄的博客,本站点不定期进行博文更新,敬请期待!
  [查看权限]

站内搜索
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 2.2 Prism Build 140101

Copyright © 2015 by 黄建雄. 本站文章除特别声明系转载外,均保留所有权利.
知识共享许可协议本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但请注明来自Blog's home,并保持转载后文章内容的完整。        
湘ICP备15003615号 工业和信息化部

  • 您的鼓励是对我最大的认可