打印
[STM32F1]

一起学习STM32————实验篇(所有实验历程只在一个帖子...

[复制链接]
1415|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
方便于管理,本人将所有实验历程放在一个帖子里面方便管理,好了废话不多说开始学习stm32吧,下面我们来写个关于蜂鸣器的操作。

实验篇1——————————蜂鸣器操作

01 新建两个文件 buzz.c buzz.h 如图1,然后添加到新建工程中区,添加到APP中,如图2

02 在 buzz.c 开始写有关于蜂鸣器的驱动代码,我们蜂鸣器是有源蜂鸣器,原理图见图3和图4,我们可以看到图中我们通过控制三极管的的导通来控制蜂鸣器的发声,GPIO口给高电平时蜂鸣器发声,低电平时蜂鸣器不发声。BUZ挂接在PB5上,我们可以操作GPIO口来操作蜂鸣器。

03 开始初始化GPIO口,代码如图5
void buzz_init()
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打开时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             //PB5
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_5);        //初始化 上电不发声
}

04接着写了两个函数 buzz_on( )  与buzz_off( ) 方便主函数调用。如图6
void buzz_on()    //发声
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5);  
}
void buzz_off()   //不发声
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);  
}

05.在buzz.h中我们对所写的函数进行声名,以及一些头文件的调用。如图7

#ifndef _buzz_H_
#define _buzz_H_
#include "stm32f10x.h"
void buzz_init(void);
void buzz_on(void);
void buzz_off(void);
#endif



06 在主函数我们通过调用buzz.h 可以使用buzz.c中的函数,先对buzz初始化然后在主循环中让蜂鸣器发声。如图8
#include "stm32f10x.h"
#include "buzz.h"
int main()
{
    buzz_init();
        while(1)
        {
         buzz_on();
        }
}

本次对凤鸣器的操作就到这里,下次我们学习系统滴答定时器,好的各位,下次见。


1.png (69.75 KB )

1.png

2.png (281.82 KB )

2.png

3.png (30.59 KB )

3.png

4.png (387.37 KB )

4.png

5.png (50.06 KB )

5.png

6.png (55.12 KB )

6.png

7.png (22.22 KB )

7.png

8.png (33.05 KB )

8.png
沙发
一路向北lm|  楼主 | 2017-7-26 10:37 | 只看该作者
不好意思有个地方打错了,“高电平蜂鸣器不发声,低电平发声",打字有点急,各位抱歉。

使用特权

评论回复
板凳
mmuuss586| | 2017-7-26 10:57 | 只看该作者
在头文件下面宏定义还简单些;

使用特权

评论回复
地板
dingbo95| | 2017-7-26 15:43 | 只看该作者
楼主,请问下我的无极型蜂鸣器该怎么驱动,想让它发出不同的声音。可以给下驱动吗?

使用特权

评论回复
5
hanzhen654| | 2017-7-26 18:05 | 只看该作者
这个跟led的差不多,加油

使用特权

评论回复
6
aizaixiyuanqian| | 2017-7-26 18:29 | 只看该作者
太棒了,我要等到SPI现在SPI啥也不会,感觉32好难啊。

使用特权

评论回复
7
stm32jy| | 2017-7-27 20:48 | 只看该作者
坐等楼主更新啊,速度有点慢

使用特权

评论回复
8
adc326| | 2017-7-27 21:21 | 只看该作者
我要学习SD卡,想做一个音乐播放器。

使用特权

评论回复
9
一路向北lm|  楼主 | 2017-7-27 22:09 | 只看该作者
一起学习STM32————实验篇 简约而不简单的Systick 定时器
大家晚上好,今天我们来学习下Systick 定时器
1.    什么是Systick呢?
常被人们称为“系统节拍时钟”。属于RAM Cortex—M3内核的一个内设,所有基于ARM Cortex—M3内核的微控制器都带Systick。
2.    大家会不会有这样的疑问,stm32有这么多的定时器,为什么ARM Cortex—M3内核要配置这样一个定时器?
主要原因是为实时操作系统提供必需的时钟节拍,当然后面我们会讲到操作系统,大家耐心等待。
3.Systick定时器结构是什么样?
Systick定时器基本结构如图1,从左往右可以看到Systick的组成,首先是时钟输入源,分别是系统时钟或Systick时钟,然后从上往下看分别是校准寄存器 重装寄存器 当前计数寄存器 控制寄存器 等等,这里不再啰嗦。
4.  Systick定时器是如何工作的?
首先Systick从时钟源接口获得时钟驱动,然后从重寄存器将重装值读入当前寄存器,并在时钟的驱动下进行减一计数,而Systick发生下溢的时候将计数标志置位,并在一定条件下触发Systick定时器中断,同时进行一次从装值载入操作。
下面我们使用Systick定时器产生1s的中断
1.打开新建工程,新建两个文件systick.c 与systick.h保存在APP文件夹中,然后将文件systick.c添加到工程分组APP中,如图2。
2.开始我们对Systick的操作,我们需要打开我们的固件库使用手册的PDF文档,选择18章系统定时器如图3。
3.我们需要用到以下几个库函数,如图4,我们通过困函数可以这样配置一个1s的定时间隔。
void systick_init()    //初始化
{
   SysTick_CounterCmd(SysTick_Counter_Disable); //Sytick失能
   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8 ); //Sytick选择时钟源
   SysTick_CounterCmd(SysTick_Counter_Clear);  //清除Sytick计数器
   SysTick_SetReload(9000 * 1000); //72M/8 9000*1000  可得到一秒的间隔。
}
void systick_delay()  //产生1s
{
   SysTick_CounterCmd(SysTick_Counter_Enable);     //使能
   while(SysTick_GetFlagStatus(SysTick_FLAG_COUNT)==0);//等待计数至0
   SysTick_CounterCmd(SysTick_Counter_Disable);     //失能
   SysTick_CounterCmd(SysTick_Counter_Clear);      //清除Sytick计数器
}
4.我们也可以通过寄存器来操作Systick定时器,配置1us 1ms的延时函数,代码如下,以后只需要调用delay_us(参数)与delay_ms(参数)即可。
void delay_us(u32 i)
{
     u32 temp;
        SysTick->LOAD=9*i;  
        SysTick->CTRL=0x01;
        SysTick->VAL=0;   
        do
        {
          temp=SysTick->CTRL;
        }
               
        while((temp&&0x01)&&(!(temp&(1<<16))));
        SysTick->CTRL=0;
        SysTick->VAL=0;
  }
   void delay_ms(u32 i)
  {
     u32 temp;
        SysTick->LOAD=9000*i;  
        SysTick->CTRL=0x01;   
        SysTick->VAL=0;      
        do
        {
          temp=SysTick->CTRL;
        }
               
        while((temp&&0x01)&&(!(temp&(1<<16))));
        SysTick->CTRL=0;
        SysTick->VAL=0;
   }
好了,本次的Systick的讲解就到这里,下次我们学习串口的一些操作。




1.png (64.11 KB )

1.png

2.png (58.94 KB )

2.png

3.png (162.92 KB )

3.png

4.png (270.55 KB )

4.png

使用特权

评论回复
10
stm32jy| | 2017-8-4 21:15 | 只看该作者
楼楼快更新帖子,等不及了都。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

257

主题

3641

帖子

73

粉丝