这次实验犯了个笑话,竟然在宏定义后面加分号...就像这样(#define XXX;)大家千万不要学我,结果报错expected expression,还苦恼半天,想为啥操作不了寄存器了?我真愚蠢!
刚开始我也不会写这些东西,其实摸清套路就好,RCC时钟使能、GPIO初始化、相关寄存器初始化、延时函数/串口等初始化、循环执行相关操作,该用库函数的用库函数,该用寄存器的用寄存器,废话少说,上代码,这里依然只给出beep部分和main部分;
1.beep.h
#ifndef __BEEP_H
#define __BEEP_H
#include "sys.h"
#define BEEP PFout(8)
void beep_init(void);
#endif
2.beep.c
#include "beep.h"
void beep_init()
{
RCC->AHB1ENR |= 1<<5;
GPIO_Set(GPIOF, PIN8, GPIO_MODE_OUT, GPIO_OTYPE_PP, GPIO_SPEED_100M, GPIO_PUPD_PU);
BEEP = 1;
}
3.main.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
delay_init(168); //初始化延时函数
uart_init(84,115200); //串口初始化为115200
led_init();
beep_init();
while(1)
{
LED0 = 0;
BEEP = 1;
LED1 = 1;
delay_ms(500);
LED0 = 1;
BEEP = 0;
LED1 = 0;
delay_ms(500);
}
}
关键字:STM32 蜂鸣器 寄存器
引用地址:
STM32蜂鸣器-寄存器
推荐阅读最新更新时间:2024-11-09 20:26
STM32菜鸟成长记录---GPIO的使用
#include stm32f10x_lib.h #include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作结构体 void Delay(__IO uint32_t nCount)//__IO的宏定义volatile { for(; nCount != 0; nCount--); } /*初始化嵌入式Flash接口,初始化PLL使其达到系统可用频率*/ void RCC_Configuration(void) { /* Setup the microcontroller system. Initialize the Embedd
[单片机]
【STM32】HAL库-DMA
DMA 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。 DMA配置过程 DMA的数据对齐 一句话,如果目标的容量存放不了源数据,则只能尽可能存放源数据(小端模式) 操作一个不支持字节或半字写的AHB设备 当DMA模块开始一个
[单片机]
STM32的定时器有两种捕获模式
一个定时器最多能同时捕获几路PWM波? 我只需要得到PWM的高电平宽度,PWM的频率是50HZ STM32的定时器有两种捕获模式 PWM输入模式和普通输入模式 在PWM输入模式下,一个定时器只能同时捕获一路PWM波 在普通输入模式下,理论上是可以同时捕获4路PWM波 即,在定时器中断中改变触发模式(上升沿、下降沿) 然后寄存器两次的差值即近似为高电平长度
[单片机]
STM32 keil 下编程,各种数据类型的长度
源码: void test_str2num(void) { printf( rnrnint is %d ,sizeof(int)); printf( rnlong int is %d ,sizeof(long int)); printf( rnlong long int is %d ,sizeof(long long int)); printf( rnfloat is %d ,sizeof(float)); printf( rndouble float is %d ,sizeof(double)); printf( rnchar is %d ,sizeof(char)); printf( rnsho
[单片机]
STM32学习004_调试工具J_LINK
jlink是segger公司的产品,jlink的官方提供调试软件和驱动,调试软件有jlink命令(j-tag调试),j-mem(内存查看),j-flash(flash烧写)等我主要用到的是jlink commander,以下是它的命令集: SEGGER J-Link指挥官V4.20h('?'寻求帮助) 编译2010年10月5日19:11:57 DLL版本V4.20h,编译于2010年10月5日19:11:41 固件:J-Link ARM V8编译2010年5月5日08:59:59 硬件:V8.00 S / N:20100214 功能:RDI,FlashDL,FlashBP,JFlash,GDBFull VTarg
[单片机]
STM32之外部中断例程
外部中断的基本步骤如下: 1.设置好相应的时钟; 2.设置相应的中断; 3.IO口初始化; 4.把相应的IO口设置为中断线路(要在设置外部中断之前)并初始化; 5.在选择的中断通道的响应函数中中断函数。
[单片机]
STM32开发笔记16: 使用静态库加快Keil编译速度
单片机型号:STM32L053R8T6 使用Stm32CubeMx生成的源文件数量比较多,编译的时候会占用很长的时间,我们仔细观察这些文件除了main.c外,其它的文件我们基本上是调用其中的函数,并不需要对其进行改动。所以,可以仿照Freescale MQX的设计方法,分层进行编译,下图是在进行项目设计时候的层次结构。 第0层用于存储Stm32CubeMx生成的工成文件,第2层处理除main.c以外的所有文件,第3层加入应用层的逻辑结构。 第0层的处理方法,大家参考Stm32CubeMx的使用方法,就可以了。 第1层的处理方法,也非常简单,可通过以下步骤完成: 1、在工程目录结构
[单片机]
一种高性能32位移位寄存器单元的设计
1 引言 随着CPU设计位数与性能的不断提高,对CPU 执行单元中专用硬件移位寄存器的要求也越来越高。CPU移位寄存器的性能直接影响到所设计CPU 对移位类指令的处理能力和执行速度。传统结构的CPU中,移位寄存器的设计一般采用矩阵结构和树状结构。当CPU的位数达到32位,速度达到100M以上时,要在一个指令周期内对32位的数据进行32 位内任意移位,以前的设计方法已经很难达到要求。曾经有过对32位桶形移位寄存器的行为级描述,但其只适用于RISC指令集,并且作为CPU中的专用硬件为了达到功耗、速度和面积上的最佳,通常硬件电路采用全定制设计。 本文给出了一种可用于32位以上CPU执行单元的移位寄存器电路,并针对CISC指令集IN
[单片机]