[求助]
课程设计题,菜鸟紧急求助,希望各位大侠帮忙
初学嵌入式系统,遇到问题,请各位大侠不吝赐教:
编程完成,只写出关键模块的程序:
(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输出的主要程序段。
(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)定时器时钟;定时器计时配置;定时器通道配置;通道赋值...
回复 沙发huo_hu 的帖子
非常感谢您的回复,我是初学,这是考试题能否详细点,谢谢
/*
* 函数名: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;
}
回复 4楼victory0702 的帖子
非常感谢,三克油
回复 4楼victory0702 的帖子
第二小题的答案您有空能否帮忙解决 谢谢
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); //清除中断标志位
}
}
回复 7楼victory0702 的帖子
太感谢了