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

共32条 3/4 1 2 3 4 跳转至
助工
2012-05-21 17:26:12     打赏
21楼

板子DIY中的说明。自己感觉还是挺有才的。
5月23日有更新,电容电阻,按键又添加了很多,所用到的基本补全。未采购的器件CAN没有焊接,其它除少量去耦电容未焊接,其它都喊上了。0欧电阻嫌麻烦没焊接的直接用焊锡短路了。
















助工
2012-05-24 18:57:11     打赏
22楼
从论坛中找到的教程《STM32 V3.4固件库使用实例》、《STM32_在KEIL_MDK环境下使用V3.4库》以及《稀里糊涂系列ARM教材》,自己也学着建立了工程模板:
XiLiHuTu_template.rar
后期的工程文件都是基于此模板编写的程序。
详细的工程建立工程在此不再赘述,参照以上三大教程就可以自主建立模板。

助工
2012-05-24 19:05:27     打赏
23楼

中断方式的USART程序调试成功,部分代码如下:

main.C中的相关代码:
int main (void)
{
 GPIO_InitTypeDef gpioInit;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 char *string;
 //----- RCC initialization -------
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO |
             RCC_APB2Periph_USART1 , ENABLE);
 //RCC_GetClockFreq(&RCC_ClockFreq);
 //----- IO initialization -----   
 gpioInit.GPIO_Pin = led1|led2|led3|led4;
 gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
  gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(led , &gpioInit);       //initialiazate gpio
 GPIO_SetBits(led , gpioInit.GPIO_Pin); //Set pin
 //GPIO_ResetBits(led , gpioInit.GPIO_Pin); //Reset pin

 // Configure USART1 Tx (PA.09) as alternate push-pull --------
 gpioInit.GPIO_Pin = GPIO_Pin_9;
 gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
 gpioInit.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &gpioInit);
 // Configure USART1 Tx (PA.10) as alternate push-pull --------
 gpioInit.GPIO_Pin = GPIO_Pin_10;
 gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
 gpioInit.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &gpioInit);
 //----- NVIC initialization -----
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);   // 抢占式优先级别
 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//指定中断源
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 指定响应优先级别1
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
                
 //----- UART initialization ----
  //0-----串口参数配置------
  USART_InitStructure.USART_BaudRate = 19200;                 //设置波特率为19200
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //设置数据位为8位
  USART_InitStructure.USART_StopBits = USART_StopBits_1;       //设置停止位为1位
  USART_InitStructure.USART_Parity = USART_Parity_No;          //无奇偶校验   
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //没有硬件流控
  USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;      //send and receive mode
 //0-----------------------
  USART_Init(USART1, &USART_InitStructure); //initialization USART1
 USART_Cmd(USART1 , ENABLE);  //enable USART1 modulation
 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //enable USART1 interruption


 //查询方式发送数据
 string = "www.hi.baidu.com/th152210\n";
 GPIO_ResetBits(led , led1|led2); //Reset pin
  putString(string,0); //send string
 GPIO_SetBits(led , led1|led2);   //Set pin
 while(1)
 {
 }
}

STM32文件中的相关代码:

void USART1_IRQHandler(void)
{
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
{  
 USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志         
 USART_SendData(USART1 , USART_ReceiveData(USART1));
}
}


高工
2012-05-25 00:13:17     打赏
24楼
长枪短炮全齐备,板上电容很节俭,佩服哦

助工
2012-05-26 04:40:58     打赏
25楼
电容不够用,所以能省的就省了,稳定性上还没有发现什么问题。

助工
2012-06-13 18:56:02     打赏
26楼
调试通用定时器时,发现定时器2不运行,用指示灯的闪烁来判断其溢出时间时,指示灯始终是灭的,没有任何变化:                    if(TIM_GetFlagStatus(TIM2 , TIM_FLAG_Update) == SET)                    {                             TIM_ClearFlag(TIM2 , TIM_FLAG_Update);                             ledFlag = !ledFlag;                             if(ledFlag == 0) GPIO_ResetBits(led , led3);                             else GPIO_SetBits(led , led3);                    } 其初始化程序是这样的:          //---- timer2 initialization ---------------------------------          timerInitialization.TIM_Prescaler = 0xff;          timerInitialization.TIM_CounterMode = TIM_CounterMode_Up;          timerInitialization.TIM_Period = 0xffff;          timerInitialization.TIM_ClockDivision = TIM_CKD_DIV1;          timerInitialization.TIM_RepetitionCounter = 0x00; // it is only used in timer1 or timer8          TIM_TimeBaseInit(TIM2 , &timerInitialization);          后来仔细看了一下人家的库文件,并没有使定时器开始运行的语句。为此开始看人家写的程序,当时并没有在意这个语句:“TIM_Cmd(TIM2,ENABLE); //启动TIM3”,直到现在才有辙了,这才看了一下TIM_Cmd程序。原来这个程序就是要让对应的定时器启动和停止。遂在程序中加入了此语句,定时器基础设置完毕且打开了。运行效果就是让一个LED灯闪烁,频率为TIM2溢出频率的1/2。

助工
2012-06-13 19:03:47     打赏
27楼
该部分初始化的基础初始化已经在上一节提到过了,下面是PWM实现的通道初始化。

 


TIM_OCStructInit(& TIM_OCInitStructure);  //
默认参数

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //工作状态

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//设定为输出   
TIM_OCInitStructure.TIM_Pulse = 0x2000; //占空长度

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//高电平

TIM_OC4Init(TIM3, &TIM_OCInitStructure); //通道初始化 
TIM_Cmd(TIM3, ENABLE); //启动TIM3 

 

 


助工
2012-07-22 01:34:16     打赏
28楼

        半个月前,我就开始了我的lcd调试,结果一无所获,原因1是我们单位大学生辞职的辞职,偷懒的偷懒,很多工作都压到我的身上了,所以,我只能在抽自己睡觉的时间开始我的设计和arm学习。2是我没有能够从基础出发,脑子没有条理的头绪。
        今天晚上趁着休班的空,我又开始在eepw上开始我的帖子回复,发帖求工程。静下心来,想想是什么地方出了问题。
        我自己建的程序文件是从别人那复制粘贴的,但错误很多。逐一排查后,将hex下载到的的开发板中,结果屏幕一片白色,没反应。一开始是从fsmc上改程序,怀疑是自己配置的问题。结果愣是把程序改正确后还是没有起色。然后,我才开始从我的驱动部分开始分析问题。
        终于,我开始充满激情的搜我的lcd资料,还是从我买lcd地方看到,我的lcd驱动芯片是ssd1289,一块大石头开始从心里瓦解。因为我的工程文件中的lcd驱动不是ssd1289的。于是乎从其他工程文件"GLCD(show chinese)"中找到了我需要的配置设置,仍然是复制粘贴(我懒的自己编写,太多了,我lcd的资料又没有看全)。结果编译链接下载后,发现屏幕由白色变化成黑色白色各一半的画面。兴奋啊。终于能驱动了。
        以下是我的工程文件。不断更新中,欢迎大家下载使用,仅供测试奥,亲。

th152210-eepw-lcd.rar


高工
2012-07-22 07:47:30     打赏
29楼
加油。。。。

助工
2012-07-22 21:27:03     打赏
30楼
谢谢。我是你的粉丝奥,呵呵。

共32条 3/4 1 2 3 4 跳转至

回复

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