这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » sacq的ARM DIY进程贴(手绘波形发生器 视频 HEX码)

共129条 8/13 |‹ 6 7 8 9 10 11 ›| 跳转至
高工
2012-05-01 19:33:31     打赏
71楼


高工
2012-05-01 23:53:13     打赏
72楼

高工
2012-05-03 23:17:01     打赏
73楼
(接着145楼)
读字节的时序与程序试对应的



被俺简化后的(对24C02适用):
AT24CXX_ReadOneByte(u16 ReadAddr)   
{     
 u8 temp=0;                         
    IIC_Start(); 
 IIC_Send_Byte(0XA0);   //发送器件地址0XA0,写数据    
 IIC_Wait_Ack();
    IIC_Send_Byte(ReadAddr);   //发送低地址
 IIC_Wait_Ack();    
 IIC_Start();       
 IIC_Send_Byte(0XA1);           //进入接收模式     
 IIC_Wait_Ack(); 
    temp=IIC_Read_Byte(0);    
    IIC_Stop();//产生一个停止条件    
 return temp;
}

——回复可见内容——

高工
2012-05-04 23:58:26     打赏
74楼
还请容我理下头绪

高工
2012-05-05 20:27:22     打赏
75楼

随便一个,可以显示串口的程序,我常是用BHS的不带发送的与下载程序在一起的。


高工
2012-05-06 15:02:44     打赏
76楼

外部中断的实验

循着正点的《STM32不完全手册》蹒跚前行,实验4 的外部中断实验,涉及到:3个按键(2个定义口不同),4个LED灯(原2个,扩到4个,定义口不同),中断(源、线、程序)。
按键的触发作为中断源,2个LED的变化,是对中断的响应,2个LED作为工作状态指示。

按键的预定义及初始程序

#define KEY0 PFin(11)  //PF11   USER BUTTER
#define KEY1 PCin(13)  //PC13   Anti-Tamper
#define KEY2 PAin(0)   //PA0    WAKE_UP

初始程序#define KEY0 PFin(11)  //PF11   USER BUTTER
#define KEY1 PCin(13)  //PC13   Anti-Tamper
#define KEY2 PAin(0)   //PA0    WAKE_UP

void KEY_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 RCC->APB2ENR|=1<<4;     //使能PORTc时钟
 RCC->APB2ENR|=1<<7;     //使能PORTf时钟

 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  

 GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入  
 GPIOF->CRH|=0X00008000;
        GPIOF->ODR|=1<<11 ;
 GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入  
 GPIOC->CRH|=0X00800000;
 GPIOC->ODR|=1<<13 ;

}



//LED端口定义

#define LED0 PEout(4)// PE4  RED LED    (LD5)
#define LED1 PEout(5)// PE5  GREEN LED  (LD6)

#define LED2 PEout(2)// PE2  RED LED    (LD3)
#define LED3 PEout(3)// PE3  RED LED    (LD4)

//LED初始程序
void LED_Init(void)
{
     
 RCC->APB2ENR|=1<<6;    //使能PORTE时钟 
    
       
 GPIOE->CRL&=0XFF0000FF;
 GPIOE->CRL|=0X00333300;//PE2~5推挽输出
 GPIOE->ODR|=0X003c;    //PE2~5输出高
}

//中断初始程序
void EXTIX_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 RCC->APB2ENR|=1<<4;     //使能PORTC时钟 //
 RCC->APB2ENR|=1<<7;     //使能PORTF时钟 //
 JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD  

 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  
// GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
// GPIOA->CRH|=0X80800000;       
// GPIOA->ODR|=1<<13;    //PA13上拉,PA0默认下拉
// GPIOA->ODR|=1<<15;    //PA15上拉

 GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入  
 GPIOF->CRH|=0X00008000;
        GPIOF->ODR|=1<<11 ;
 GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入  
 GPIOC->CRH|=0X00800000;
 GPIOC->ODR|=1<<13 ;


 Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
 Ex_NVIC_Config(GPIO_F,11,FTIR);//下降沿触发  //
  Ex_NVIC_Config(GPIO_C,13,FTIR);//下降沿触发  //
// Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发  //
// Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发  //

 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);    //抢占2,子优先级2,组2
 MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2   
}

被注解的,是原有的语句,为学习对比,仍保留着

int main(void)
{   
  Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,115200);  //串口初始化
 LED_Init();      //初始化与LED连接的硬件接口
 EXTIX_Init();   //外部中断初始化
 LED3=0;   //led test
 while(1)
 {    
  printf("OK\n"); 
  delay_ms(1000);
  LED2=!LED2 ;     //闪
  LED3=!LED3;  
 } 
}

主程序,只增加了2个LED闪动,交替的闪动,说明运行在主程序的循环里,否则,哈,找原因去吧。(曾利用这点,找到了中断程序中问题:未正确清除中断标志位,而一直处在中断状态,无暇去闪动LED)


高工
2012-05-07 22:58:35     打赏
77楼

高工
2012-05-09 00:28:05     打赏
78楼
权威指南我看不下去。
刚试DMA,不给面子,卡在那儿,好像不干呢,不好调。

高工
2012-05-10 22:01:10     打赏
79楼
LCD是版主指定的那种,芯片是SSD1289?
还有,PCB插座的BUG,这个你修改过了。
为了验证LCD,换个其它hex看看.

高工
2012-05-11 23:38:25     打赏
80楼
关键看LCD的DeviceCode是不是“8989”(即SSD1289),我那个只支持SSD1289,光看表面可能还不够。

道路是曲折的,前途是光明的。
“触摸”是可能的,这算是今晚的不小的收获。


共129条 8/13 |‹ 6 7 8 9 10 11 ›| 跳转至

回复

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