这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » (LCD)emusic ARM DIY进程帖

共21条 2/3 1 2 3 跳转至
助工
2012-04-23 22:44:13     打赏
11楼
本实验效果是通过User按键,控制LD6灯的亮灭。
按键中断初始化代码:
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOF, GPIO_PinSource11); 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
 EXIT_Type.EXTI_Line = EXTI_Line11;
 EXIT_Type.EXTI_Mode = EXTI_Mode_Interrupt;
 EXIT_Type.EXTI_Trigger = EXTI_Trigger_Falling;
 EXIT_Type.EXTI_LineCmd = ENABLE;
 EXTI_Init(&EXIT_Type);

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //中断通道
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//强占优先级
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //次优先级
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道中断使能
 NVIC_Init(&NVIC_InitStructure);       //初始化中断
中断函数:
void EXTI15_10_IRQHandler(void)
{
    if(Led_State)
   {
       GPIO_SetBits(GPIO_LED,DS1_PIN);
        Led_State = 0;
   }
   else
   {
        GPIO_ResetBits(GPIO_LED,DS1_PIN);
        Led_State = 1;
   }
 EXTI_ClearITPendingBit(EXTI_Line11); 
}

助工
2012-04-23 23:11:05     打赏
12楼
STM32F10XX通过设置SCB_AIRCR寄存器中的PRIGROUP[2:0],将优先级PRI_N[7:4]可以分成两部分:一部分是优先级组(先占优先级),另一部分是次优先级。
PRIGROUP PRI_N Group priorities Sub priorities
0b001 0bxxxx 16 None
0b100 0bxxxy 8 2
0b101 0bxxyy 4 4
0b110 0bxyyy 2 8
0b111 0byyyy None 16
当一个中断执行的时候,不能被同一个优先级组的中断打断。
当多个中断请求时,若是相同的优先级组,就由次优先级确定响应的顺序。

助工
2012-04-30 11:04:12     打赏
13楼

有时间就公布进度


助工
2012-04-30 11:25:39     打赏
14楼
SysTick实验:
     本实验以LED控制实验为基础,增加delay_nms()精确延时实现走马灯效果。本实验使用的是8MHz的晶振。使用官方3.5.0的库。
从stm32f10.h分析得知PLLCLK  = HSE * 9 = 72Mhz,PLLCLK = SYSCLK = HCLK = 72Mhz
初始化代码如下:   
SysTick->CTRL = 0x00;    //设置SysTick的时钟为HCLK/8 = 9Mhz
 SysTick->VAL  = 0;            //清倒计数值
延时函数
 void delay_nms(uint16_t n)
{
 uint32_t temp;
 SysTick->LOAD = 9000*n;   //以9000为基准值也就是1ms,n输入有效值控制在1~1864.
 SysTick->CTRL = 0x01;
 do
 {
     temp = SysTick->CTRL;
 }
 while( (temp&0x01)&&! (temp&(1<<16)) );     
 SysTick->CTRL = 0x0000;
 SysTick->LOAD = 0x0000;
}

助工
2012-04-30 11:46:33     打赏
15楼

定时器查询实验:
    本实验以LED控制实验为基础,使用TIM2查询方式作为延时实现走马灯效果。本实验使用的是8MHz的晶振。使用官方3.5.0的库。
    TIM2的CK_INT时钟是APB1的倍频,除非APB1的时钟分频数设置为1.本实验APB1的时钟是HCLK/2 = 36Mhz,所以CK_INT的时钟频率为72Mhz。
TIM2初始化代码:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InitTypeDef.TIM_Prescaler = 7200;     //预分频 72Mhz/7200 = 10Khz  T = 0.1ms 
TIM_InitTypeDef.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_InitTypeDef.TIM_Period = 5000;                     //自动重装载值 这里定时为  500ms
TIM_InitTypeDef.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitTypeDef.TIM_RepetitionCounter = 0;    //TIM1和TIM8使用
TIM_TimeBaseInit(TIM2, &TIM_InitTypeDef);
TIM_ClearFlag(TIM2, TIM_FLAG_Update);

使用方式:
 while(1)
 {
     GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);
     Turn_On_LED(i);
     i++;
     if(i>3)
    {
        i = 0;
    }
    TIM_Cmd(TIM2, ENABLE);
    while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)==RESET);
   TIM_ClearFlag(TIM2, TIM_FLAG_Update);
   TIM_Cmd(TIM2, DISABLE);
 }


助工
2012-04-30 11:54:06     打赏
16楼

定时器中断方式:
      基于定时器查询方式实验上,实现走马灯效果。
在TIM2初始化代码:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InitTypeDef.TIM_Prescaler = 7200;     
TIM_InitTypeDef.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitTypeDef.TIM_Period = 5000;                    
TIM_InitTypeDef.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitTypeDef.TIM_RepetitionCounter = 0;    
TIM_TimeBaseInit(TIM2, &TIM_InitTypeDef);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);        //打开更新中断
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
TIM_Cmd(TIM2, ENABLE);

中断控制器初始化:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//强占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //次优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道中断使能
NVIC_Init(&NVIC_InitStructure);       //初始化中断


助工
2012-04-30 12:06:37     打赏
17楼
谢谢提醒。至于1ms嘛,是对这个实验做的不是针对18B20

助工
2012-04-30 12:12:48     打赏
18楼
上图

助工
2012-05-02 21:36:12     打赏
19楼

24C02读写实验:
      向24C02的00H到13H地址写入0x0~0x13,然后读出,通过串口输出到终端。
初始化代码:
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6; 
 GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;     //复用开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7; 
 GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;     //复用开漏输出
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5; 
 GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;     //复用开漏输出
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
 I2C_DeInit(I2C1);
 I2C1_InitStruct.I2C_Mode = I2C_Mode_I2C;
 I2C1_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
 I2C1_InitStruct.I2C_OwnAddress1 = 0x30;
 I2C1_InitStruct.I2C_Ack = I2C_Ack_Enable;
 I2C1_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
 I2C1_InitStruct.I2C_ClockSpeed = 200000;
 I2C_Cmd(I2C1,ENABLE);
 I2C_Init(I2C1, &I2C1_InitStruct);
 I2C_AcknowledgeConfig(I2C1,ENABLE); 


助工
2012-05-03 00:46:43     打赏
20楼
这个我没有试,明天试试

共21条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]