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

共32条 2/4 1 2 3 4 跳转至
助工
2012-05-12 22:30:43     打赏
11楼
一晃到了512了,时间过的真快啊。虽然在努力的调试我的板子,但是调试过程一直没来的及分享。时间似乎总是挤不出多少来,这也许就是上班族的悲剧吧。

下面是我的一些采买信息表,看时间可以知道,这是器件买了一个月才张贴出来,忘版主见谅。






助工
2012-05-12 22:44:17     打赏
12楼
4月21日22:37 拖着疲惫的身体回到宿舍,迫不及待的拿出板子,热上烙铁,开始焊接板子,然后扔出电脑开始调试,调试结果不尽人意啊,错误,could not power up debug port          难道是stm32没电?万用表派上用场了,测试vdd电压,正常。难道是j-targ接口问题?看电路原理图吧,5个上拉电阻没焊接,看资料上说,j-targ接口不应有不确定的电平,上拉是必须的,但是芯片已经自带上拉了吧。焊上电阻试试,结果依然惨不忍睹啊。          解决了几个怀疑点,都无解。从power上做文章吧。再阅原理图,vdd都是布线不好的,不需要接什么东西了,几个去耦电容没接,应该不会影响下载仿真调试的。倒是几个磁珠没接,安全起见,接上。无解,无解……,这是传说中的纠结。          再再阅原理图,发现有个vdda没接,需要磁珠和电容。接上吧,万一是这个的问题呢。完成后再次测试下载,我了个去,下载上了,原理就是他的原因。          问题的原因在这: VSSA,VDDA = 2.0~3.6V:为ADC、复位模块、RC振荡器和PLL的模拟部分提供供电。使用ADC时,VDDA不得小于2.4V。VDDA和VSSA必须分别连接到VDD和VSS。          所以说vdda不能空着啊,必须有电压才行。

助工
2012-05-13 22:49:16     打赏
13楼

要学习STM32,一般文章都会建议使用者先进行基础知识的储备,如学习什么ARM构架、STM32 datasheet等,这往往让学习者感到枯燥,乏味。
        前些日子,我通过阅读论坛中大量的资料了解到,其实STM32器件的编程不仅仅局限于对相关寄存器配置和启动方式的学习,为了提高产品的开发,厂家已经为使用者做好了前期的准备,那就是库。对器件的编程要么使用原始方法对器件的寄存器进行一步一步的设置,要么就是使用库文件了。由于比赛的时间都是有限的,如果不适用库的话,估计两三个月不会完成对STM32的学习的。
        本菜鸟也是初学者,为了能多掌握一门技术,不得不在较短的时间里(当然不是比赛时间短,而是工作业余时间短,一天才短短的一两个小时,还是牺牲睡觉的时间),更多的学习ARM。我建议大家使用ST的库文件,当然我也是使用库进行学习的。
那么要使用库文件,只听别人滔滔不绝的说,不如亲身体会一下。这就是要学习在MDK下建立工程的目的。


助工
2012-05-14 00:11:25     打赏
14楼
DIY调试过程经验分享  ---------   wenyangzeng
一些技术资料链接        ---------   sacq
12个调试通过的hex文件-------   asean
 

助工
2012-05-15 00:11:07     打赏
15楼

对于一个器件来说,只有实现了输入输出才能体现出它存在的价值,因此学习STM32的GPIO有着重要的意义。
        那么如何才能学好GPIO呢?那么你就要对GPIO相关的库文件进行了解。最好的方法就是实践,首先建立一个工程,然后编写GPIO的程序,不断的修改程序,并利用板载的LED观察每次修改的结果,不断的总结经验中就能学到很多知识。
        趁热打铁,我自己写的LED流水灯测试程序,代码如下:
/**
  ******************************************************************************
  * @file    main.c
  * @author  th152210
  * @version V1.0
  * @date    2012/05/07
  * @brief   four LEDs turn on/off like running water
  ******************************************************************************
  * @description
  * four LEDs turn on/off like running water
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"

#define led    GPIOE
#define led1      GPIO_Pin_2
#define led2   GPIO_Pin_3
#define led3   GPIO_Pin_4
#define led4   GPIO_Pin_5
#define ledTurnOn(ledx) GPIO_ResetBits(led , ledx)
#define ledTurnOff(ledx) GPIO_SetBits(led , ledx)
#define ledTurnOnAll() ledTurnOn(gpioInit.GPIO_Pin)
#define ledTurnOffAll() ledTurnOff(gpioInit.GPIO_Pin)
/**
  * @brief  time delay about 0.3s
  * @param  none.
  * @retval None
  */
void delay(void)
{
 uint32_t i,j;
 for (i=0;i<1500;i++)
 {
  for (j=0;j<1000;j++)
  {
   ;
  }
 }
}
/**
  * @brief  the main process.
  * @note   cannt built without it.
  * @param  none.
  * @retval None
  */
main ()
{       
 GPIO_InitTypeDef gpioInit;
 uint16_t count0,count1,count2,count3;
 count0 = 0;
 //-----initialization------
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //enable APB2 periph
 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

  while (1)
   { 
  for(;count0<8;count0++)   //all LEDs light on/off together
  {
   ledTurnOnAll();
   delay();
   ledTurnOffAll();
   delay();
  }
  for(;count0<12;count0++)   //right turn on one by one
                 //and turn off all , then left...
  {
   count1=0;
   ledTurnOn (led1);
   delay();
   ledTurnOn (led2);
   delay();
   ledTurnOn (led3);
   delay();
   ledTurnOn (led4);
   delay();
   ledTurnOffAll();
   delay();

   ledTurnOn (led4);
   delay();
   ledTurnOn (led3);
   delay();
   ledTurnOn (led2);
   delay();
   ledTurnOn (led1);
   delay();
   ledTurnOffAll();
   delay();
  }
  for(;count0<16;count0++)   //right turn on one by one
                 //and left turn off one by one
  {
   count1=0;
   ledTurnOn (led1);
   delay();
   ledTurnOn (led2);
   delay();
   ledTurnOn (led3);
   delay();
   ledTurnOn (led4);
   delay();

   ledTurnOff (led4);
   delay();
   ledTurnOff (led3);
   delay();
   ledTurnOff (led2);
   delay();
   ledTurnOff (led1);
   delay();
  }
  for(;count0<17;count0++)
  {
   ledTurnOn (led1);
   delay();
   ledTurnOn (led2);
   delay();
   ledTurnOn (led3);
   delay();
   ledTurnOn (led4);
   delay();
   ledTurnOff (led1);
   delay();
   ledTurnOff (led2);
   delay();
   ledTurnOff (led3);
   delay();
   ledTurnOff (led4);
   delay();
  }
  for(;count0<21;count0++)   //left turn on one by one
                 //and right turn off one by one
  {
   count1=0;
   ledTurnOn (led4);
   delay();
   ledTurnOn (led3);
   delay();
   ledTurnOn (led2);
   delay();
   ledTurnOn (led1);
   delay();

   ledTurnOff (led1);
   delay();
   ledTurnOff (led2);
   delay();
   ledTurnOff (led3);
   delay();
   ledTurnOff (led4);
   delay();
  }
   }
}

工程文件以及相关视频、图像,明天下班后分享。

 


院士
2012-05-15 09:34:09     打赏
16楼
楼主换个颜色呗。
看着太刺眼了~~

我不得不反白看楼主的文章~~

助工
2012-05-15 23:14:56     打赏
17楼
LED流水灯工程文件如下:
th152210-eepw-led.rar


程序运行视频:


助工
2012-05-19 16:00:59     打赏
18楼
我的板子靓照。

看看焊接水平怎么样?。








如果我说我没有没有用助焊剂,你相信吗?

我也不相信不要助焊剂能焊接好。我的板子开始的时候边上全是深褐色,难看死了。于是从公司里借了些橡胶水,擦啊擦,编程这样了。

助工
2012-05-19 16:07:30     打赏
19楼
板子全貌,板子不和我意,所以不少DIY成分出现啊。





扩展模块连连上。
以太网模块接口不对,自己DIY接口,硬插;
超声波模块引脚少一个,将板载接口空脚接地,DIY解决问题;
以上两个模块间距不足,DIY割板,硬上;
mp3模块接口全乱套,DIY打孔,用螺丝固定,使用的时候用杜邦线连接使用。

助工
2012-05-20 00:10:38     打赏
20楼

我的串口调试程序。开始运行时,先发送一串数据。然后开始等待接收数据
(inputString()),再将接收到的数据发送(putString())出去。我的程序如
下:

/**
  ******************************************************************************
  * @file    main.c
  * @author  th152210
  * @version V1.0
  * @date    2012/05/07
  * @brief   USART Send string "
www.hi.baidu.com/th152210" per second
  ******************************************************************************
  * @description
  * USART Send string "
www.hi.baidu.com/th152210" per second , and when it is
 * sending the led flashing.then USART send the string it received from the
 * computer . for example when it receive "
www.hi.baidu.com/th152210" , then it
 * will send "
www.hi.baidu.com/th152210" to the computer .
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/

#include "main.h"
#include "string.h"

/* Defination ----------*/
//---the port for leds---
#define led GPIOE
#define led1 GPIO_Pin_2
#define led2 GPIO_Pin_3
#define led3 GPIO_Pin_4
#define led4 GPIO_Pin_5

/********var**********/
char usartRxBuffer[256];

/**
  * @brief  time delay
  * @param  none.
  * @retval None
  */
void delay()
{
 vu32 i,j;
 for(i=0;i<9000000;i++);
}
/**
  * @brief  send a data by USART
  * @param  data : the data for sending
  * @retval none
  */
void putChar(uint16_t data)
{
 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//wait until empty
  USART_SendData(USART1 , data);    //send data
}
/**
  * @brief  send a string by USART
  * @param  data : the data for sending
  * @retval none
  */
void putString(char data[] , uint16_t lenth)
{
 uint16_t i;
 if(lenth == 0)
 {
  for(i = 0 ; i < strlen(data); i++)
  {
   putChar(data[i]); //send one data of data[i]
  }
 }else
 {
  for(i = 0 ; i < lenth ; i++)
  {
   putChar(data[i]); //send one data of data[i]
  }
 }
}
/**
  * @brief  receive a data
  * @param  none
  * @retval the data received
  */
uint16_t inputChar()
{
 uint16_t data;
 while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);//wait for the RX no empty bit become 1
 data = USART_ReceiveData(USART1);
 return data;
}
/**
  * @brief  receive a string
  * @param  the string received
  * @retval none
  */
char inputString()
{
 char data , i;
 data = (char)inputChar();
 for(i = 0; (data != 0x0D) && (i < 255); i++)
 {
  usartRxBuffer[i] = data;
  data = (char)inputChar();
 }
 if(i == 255) return 0;
 else return 1;
}
/**
  * @brief  the main
  * @param  none.
  * @retval None
  */

int main (void)
{
 GPIO_InitTypeDef gpioInit;
 USART_InitTypeDef USART_InitStructure;
 char *string;
 uint16_t data;
 //----- RCC initialization -------
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //enable APB2 periph
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, 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);

 //----- 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, DISABLE); //disable 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)
 {
  GPIO_ResetBits(led , led3|led4); //Reset pin1 2
  inputString();
  //data = inputChar();
  //delay();
  GPIO_SetBits(led , led3|led4);   //Set pin1 2
  //putString(string,6);
  GPIO_ResetBits(led , led1|led2); //Reset pin3 4
  //putChar(data); 
  putString(usartRxBuffer,0);
  GPIO_SetBits(led , led1|led2);   //Set pin3 4
 }
}



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

回复

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