新手入门
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2016-8-13
- 在线时间
- 2 小时
|
1金钱
led.c中的代码
#include "led.h"
#include "stm32f10x.h"
void led_init(void)
{
/*
//以下为调用库函数来使能GPIOB和GPIOE的时钟和初始化PB5和PE5的代码
GPIO_InitTypeDef LED_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
LED_InitStructure.GPIO_Pin=GPIO_Pin_5;
LED_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
LED_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&LED_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
LED_InitStructure.GPIO_Pin=GPIO_Pin_5;
LED_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
LED_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&LED_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
*/
//以下为操作寄存器来使能GPIOB和GPIOE的时钟和初始化PB5和PE5的代码
RCC->APB2ENR|=1<<3;
RCC->APB2ENR|=1<<6;
GPIOB->CRL&=0xff0fffff;
GPIOB->CRL|=0x00300000;
GPIOB->ODR|=1<<5;
GPIOE->CRL&=0xff0fffff;
GPIOE->CRL|=0x00300000;
GPIOE->ODR|=1<<5;
}
beep.c中的代码
#include "stm32f10x.h"
#include "beep.h"
void beep_init(void)
{
/*
//以下为调用库函数来使能GPIOB的时钟和初始化PB8的代码
GPIO_InitTypeDef BEEP_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
BEEP_InitStructure.GPIO_Pin=GPIO_Pin_8;
BEEP_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
BEEP_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&BEEP_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
*/
//以下为操作寄存器来使能GPIOB的时钟和初始化PB8的代码
RCC->APB2ENR=1<<3;
GPIOB->CRH&=0xfffffff0;
GPIOB->CRH|=0x00000003;
GPIOB->ODR&=~(1<<8);
}
main.c中的代码
#include "led.h"
#include "beep.h"
#include "delay.h"
#include "stm32f10x.h"
int main(void)
{
delay_init();
led_init();
beep_init();
while(1)
{
/*
//以下为调用库函数来实现PB5PB8和PE5交替输出高低电平
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
delay_ms(500);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
delay_ms(500);
*/
/*
//以下为操作寄存器来实现PB5PB8和PE5交替输出高低电平
GPIOB->ODR|=1<<5;//GPIOB->BSRR|=1<<5;
GPIOE->ODR&=~(1<<5);//GPIOE->BSRR|=1<<21;//GPIOE->BRR|=1<<5;
GPIOB->ODR|=1<<8;//GPIOB->BSRR|=1<<8;
delay_ms(500);
GPIOE->ODR|=1<<5;//GPIOE->BSRR|=1<<5;
GPIOB->ODR&=~(1<<5);//GPIOB->BSRR|=1<<21;//GPIOB->BRR|=1<<5;
GPIOB->ODR&=~(1<<8);//GPIOB->BSRR|=1<<24;//GPIOB->BRR|=1<<8;
delay_ms(500);
*/
//以下为通过位带操作来实现PB5PB8和PE5交替输出高低电平
PBout(5)=1;
PEout(5)=0;
PBout(8)=1;
delay_ms(500);
PBout(5)=0;
PEout(5)=1;
PBout(8)=0;
delay_ms(500);
}
}
上面的代码无法使蜂鸣器响时,绿灯同时点亮(精英板),只有红灯和蜂蜜器交替工作,找了许久,未找到原因,后来尝试将main.c中的beep_init写到led_init前,才解决问题,请教前辈高手是什么原因,新手提的问题可能比较笨,请见谅,谢谢!!
|
|