打印
[STM32F1]

01-stm32f103 f107VcT6初学练习:外部时钟的配置

[复制链接]
1941|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
龙溪傲|  楼主 | 2015-8-29 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学stm32,今天stm32的外部中断配置,因为板子上没有按键,所以用GPIO的PE3口输出高电平,PE2口设置为外部中断引脚,PD13控制LED。程序需要注意的是:1、必须将复用时钟打开 。2、如果是上升沿触发,需要将PE2口设置为下拉电阻输入模式。3、中断向量的名字都在引导函数中查看,可以在stm32f10x_it.c中写它的中断函数。
代码如下(main.c)

#include "stm32_public.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void EXTI_Configuration(void);

int main(void)
{
        RCC_Configuration();
        GPIO_Configuration();
        EXTI_Configuration();
        NVIC_Configuration();
       
        GPIO_SetBits(GPIOE,GPIO_Pin_2);
        while(1);

}

void RCC_Configuration(void)
{
        SystemInit();
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}

void GPIO_Configuration(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOE,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
        GPIO_Init(GPIOE,&GPIO_InitStructure);
}
//ÍⲿÖжÏÅäÖÃ
void EXTI_Configuration(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
       
        EXTI_ClearITPendingBit(EXTI_Line3);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);

        EXTI_InitStructure.EXTI_Line = EXTI_Line3;   
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
       
        EXTI_Init(&EXTI_InitStructure);
}

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
}

stm32f10x_it.c

void EXTI3_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line3)==SET)
        {
                EXTI_ClearITPendingBit(EXTI_Line3);Ï
                if(GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_13)==Bit_RESET)
                {       
                               
                        GPIO_SetBits(GPIOD,GPIO_Pin_13);
                }
                else
                {
                        GPIO_ResetBits(GPIOD,GPIO_Pin_13);
                }
        }

}
stm32f10x_it.h
void EXTI3_IRQHandler(void);

在写程序的时候多查看固件库,虽然固件库有些不对,可以用于参考,并结合实际的库来使用(用go to define ""查看其函数)。


沙发
mmuuss586| | 2015-8-29 21:45 | 只看该作者

谢谢分享;

使用特权

评论回复
板凳
C洛达尔多| | 2015-8-30 09:15 | 只看该作者
楼主分享了很好的经验,现在我也在用stm32 的单片机

使用特权

评论回复
地板
跟屁虫| | 2015-8-30 10:23 | 只看该作者
对,中断函数就写在这个文件里面了,也可以写在外面的

使用特权

评论回复
5
龙溪傲|  楼主 | 2015-8-30 11:09 | 只看该作者
谢谢大家!现在刚刚入门,原先在51的基础上学过msp430,感觉时钟配置、相应的寄存器配置那块两者的原理都是差不多的,只是stm32站在了固件库的开发上,更方便了,不需要详细的了解底层的东西了。

使用特权

评论回复
6
搞IT的| | 2015-8-30 20:44 | 只看该作者
谢谢分享,要是能有些中文注释就更好了,也方便学习了。

使用特权

评论回复
7
香水城| | 2015-8-31 11:03 | 只看该作者
谢谢分享!
支持一下!:D

使用特权

评论回复
8
badboyhzg| | 2015-8-31 11:29 | 只看该作者
诚心寻求反汇编 逆向高手长期合作 最好在广州周边的 沟通比较方便 主要帮我把程序反汇编出来 找到程序里面的算法格式 程序接口 数据库 及通讯协议 骗子勿扰 QQ 348286236 加好友时 备注 汇编 逆像

使用特权

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

本版积分规则

6

主题

18

帖子

0

粉丝