[求助] 课程设计题,菜鸟紧急求助,希望各位大侠帮忙

allan0501   2013-9-23 09:12 楼主
初学嵌入式系统,遇到问题,请各位大侠不吝赐教:
编程完成,只写出关键模块的程序:
(1).课程设计题:STM32的PD4接按键,PE4接LED灯,要求使用查询方式读取按键PD4高低电平的变化,当PD4=1,即高电平时,PE4所连接的LED灯点亮;当PD4=0,即低电平时,该LED熄灭;
(2).课程设计题:使用PC11设置为外部中断源完成上小题(1)的功能,即PC11接按键,产生中断,PD4接LED灯,当按键按下产生中断时,该LED点亮;没有按键按下时熄灭。
(3).课程设计题:写出使用Timer3产生18kHz, 35%占空比PWM输出的主要程序段。

回复评论 (7)

(1)高级一点的
#define Dev_GetBit_BB(DevAddr, BitNumber)         (*(vu32 *)(DEV_BB_BASE|((DevAddr - DEV_BASE)<<5)|((BitNumber)<<2)))
gpiod,gpioe时钟...
Dev_GetBit_BB(((u32)&(GPIOE->ODR)),4)=Dev_GetBit_BB(((u32)&(GPIOD->IDR)),4);//不知道led共阳还是共阴
...

(2)gpioc,gpiod时钟;nvic配置中断;中断服务里上面那段...

(3)定时器时钟;定时器计时配置;定时器通道配置;通道赋值...
点赞  2013-9-23 09:48

回复 沙发huo_hu 的帖子

非常感谢您的回复,我是初学,这是考试题能否详细点,谢谢
点赞  2013-9-26 10:32
/*
* 函数名:GPIO_Config
* 描述  :配置LED用到的I/O口
* 输入  :无
* 输出  :无
*/
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;      
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}
u8 Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
{   
  /*检测是否有按键按下 */
    if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0)
   {   
    /*延时消抖*/
    Delay(10000);  
      if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0)  
     {  
      /*等待按键释放 */
      while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0);   
       return  0;  
     }
   else
     return 1;
  }
else
  return 1;
}
点赞  2013-9-26 12:45

回复 4楼victory0702 的帖子

非常感谢,三克油
点赞  2013-9-26 15:34

回复 4楼victory0702 的帖子

第二小题的答案您有空能否帮忙解决 谢谢
点赞  2013-9-26 16:10
GPIO配置及按键扫描类似1题,以下为外部中断配置和中断服务程序的大体框架
u8 KeyValue;
/*
* 函数名:EXTI_PC11_Config
* 描述  :配置 PC11 为线中断口,并设置中断优先级
* 输入  :无
* 输出  :无
* 调用  :外部调用
*/
void EXTI_PE5_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* config the extiline(PC11) clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);
            
/* config the NVIC(PC11) */
NVIC_Configuration();
/* EXTI line gpio config(PC11) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  // 上拉输入
  GPIO_Init(GPIOC, &GPIO_InitStructure);
/* EXTI line(PC11) mode config */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);
  EXTI_InitStructure.EXTI_Line = EXTI_Line11;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

KeyValue=KeyScan(GPIOC,CPIO_PIN_11);

void EXTI11_IRQHandler(void)
{
if(!KeyValue) //按键按下产生了EXTI Line中断
{
  //控制 LED亮灭,取决于LED高低电平点亮方式,此处用低电平点亮
  GPIO_WriteLow(GPIOD, GPIO_Pin_4);
  EXTI_ClearITPendingBit(EXTI_Line11);     //清除中断标志位
}  
}
点赞  2013-9-27 16:50

回复 7楼victory0702 的帖子

太感谢了
点赞  2013-9-28 15:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复