找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2620|回复: 3
打印 上一主题 下一主题
收起左侧

我的stm32道路

[复制链接]
跳转到指定楼层
楼主
ID:113276 发表于 2016-4-10 15:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  今天2016的4月2日,所谓的大学周六,其实大学周末与否都没什么区别,这几天做着stm32,在我大二上学期刚开始接触单片机,无非与大家是一样的从51开始,在近半年的时间,基本上已经掌握了部分,而后有在学长的带领下接触了avr的单片机,然而内心躁动的我准备开始接触stm32,因为自己的目标早已经定在嵌入式开发,希望自己能够成功吧,所以以此来记录自己的学习过程,本人处女座与天秤座的结合,沉醉于记忆。。。
  前几天在51自学网里看了stm32的视频,花了近3天的时间,勉强学会了如何建立一个工程,光做笔记就做了近12页的笔记,最大的感受就是太难了,与51和avr相差太大了,建个工程都这么难,相关的资料也特别难找,不过还是自己激励自己,加油吧,要不然毕业之后连饭都没得吃!!!所以坚持吧!
  查询了一些资料,大多数都说要学这个要学会调用库函数,然而在没有人的带领下,这些太难了,尽管这只是开始。所以自己现在疯狂的搜罗着网上的资料,下一步就是点亮一个led,似乎所有的单片机都是以点亮led开始的,恩,个人觉得很有道理。
  好了不说了,去做点实事吧,点亮led的过程!!!

此时已经是晚上的11点,但是此时我还是抑制不住自己内心的激动之情,因为经过近一周的努力,终于可以顺利的点亮了led的灯,或许高手们都不以为然,但是这就是一个漫长的进步过程,从中也学习了不少,当然从一个技术控的角度讲,每一次进步都是对自己的莫大鼓舞,让自己更有动力走下去。
早上醒来已经是9点,最近老是加夜班,身体疲惫不堪,真的犹如那句广告词“感觉身体被掏空”。。。起来看看电影娱乐一下就已经是中午,真的有时候自己感觉时间完全不够用!吃过饭之后就立即投入到学习的过程,又去重复看了51自学网的stm视频,还有腾讯里面刘洋老师的视频,感触颇深。有时候两种途径获得信息就会抓住某些规律,此时在第三次观看视频之后,我觉得可以通过自己的一些方式来写程序,因为他们的视频里面对于主程序都是在一个文件夹下,所以自己在查询网上的建议,跨越各大论坛,询问各大网友,明白这样做是可行的!呵呵,有时候猜想就是灵感的体现。然后按照老师给的步骤书写,发现不对,因为程序编译不了!!!作为一个编程的人,最恐惧的是编译不了,还不知道怎么改,然后又是看视频,又找实例,查固件库。。。这样大概六点吧,终于知道是函数没使用对,然后改!还是不成功,不知不觉又是2个小时过去。。。幸运的是在微博上找到了一个相似的程序,在自己加以修改的情况下,终于实现了led的亮!!!此时的自己已经是兴奋之情溢于言表,冲动的像只猴子抓住床柱不停摇晃着床,室友都有些惊讶,或许在他们眼里,这人是不是疯了,但是无所谓啦,因为我离成功又进了一步!!!再一个或许有人不知道的是这种单片机只要学会编led后就会了接下来的,可以说是进步了不少!
或许成功总是那么捉弄人,自己编的程序能编译,但是还是不能让灯亮!激动的心又被泼盆凉水,难道这东西认人?不!然后自己又翻出谭浩强的c语言书复习,查看结构体和数组,还有函数这几节,收获颇多!又反复调啊调啊。。。眼角飘进来时间已经是22:30分,这时间真是叫飞逝啊!然后调到函数的调用和声明和定义这块,突然又是灵感一现,因为自己看到了自己只是声明了函数,并没有调用,所以会出错,然后改正之后,果不其然,灯亮了!!!灯亮了!!!灯亮了!!!这几天的努力就是这样一个现象,不过,今天我满足了!!!
  明天加油!!!

----------------------------

  哎呀!这一天没有什么收获,身心还疲惫! 凌晨来写这篇博文,或许这个道路只是自己的一篇篇日记了。。。在大学里有许多的东西都是身不由己,当自己真正的踏入自己的大学的第一步就感受到了那种大学就是一个微型社会的表现,这也就是一个初体验,而当如今自己深入其中的时候。。。哎。。。
  早上起来的很早,但是身上似乎就没有那种积蓄的力量来激励自己起床,直到自己实在无法忍受口中的的那股气息。。。本以为可以好好的在剩下的时间好好学习那块开发板,然而形式主义的大学各种安排,各种命令无法让自己真真的安静下来学习。。。因为自己如果不接受那样的安排,现有的所有硬件都会消失,最后也就功亏一篑,半途而废。。。
达到特定地点之后本以为想通过自己的方式让现有条件变得更好,然而事与愿违,整个地点的网络被自己整瘫痪了,头似乎就有些不高兴,但没办法打碎的牙齿还是自己吞,就是这样只有自己在这种环境下,才能成长,或许这就是逆境。。。
   好吧,下一步就是stm32的话题。今天打开电脑还是挺兴奋的,因为昨天一晚上因为成功的第一步而没睡好觉,而今早打开饿第一幕,自己却不知道学点什么,感觉什么都想学,但自己的能力始终在那摆着,所以还是看视频的节奏。今天定的是systick这一节,然而看着是视频的30多分钟,但自己花的时间在一下午的时间还是那么多,真的是台上一分钟,台下十年功。。。看了视频,本以为按照库文件里面按照gpio的方式配置,然而发现这种方法是失败的,因为在自己接下来的时间里看着网友的留言,发现这些库文件也有不靠谱的时候!之后自己找资料,又发现,又尝试,最大的感受就是,一个符号就会让自己花费很多的时间,或许这就是基础!!!
  有些人不懂我们有时兴奋的像个疯子,只有自己当花费一两天的时间解决一个问题后的感受才能明白。。。


--------------------------

今天能够早些写下这篇,还是因为今天的结束也就预示着清明假期的结束,同时也是明天上课!有时自己感到大学学的东西太少,因为老师讲的太浅,知识太老,与社会严重脱节,要想获得一线资料只有通过自己的方式,到社会上汲取。长而久之,自己对于这些必修的大学课程也就比较反感的,浪费时间,最后只为那次的点名没有迟到而获得不重修的资格,赢得更多的时间来让自己去学习别的东西!
昨天由于回寝太晚,室友锁门了,自己磨不开面子在旁边寝室借宿了一晚,不过在夜晚是辗转反侧,还有就是那个自己下达的任务没完成,让自己难以入眠!因为横躺在床上,实在不舒服,2点睡,四点就行,独自一人漫步在宿舍的走廊等待着天明。。。
早上实在忍受不住身体的困倦,待室友打开门之后,又回到自己的床上睡到9点,到下午到工作地点,又是与那个硬件奋斗,到处找资料,问好友,逛论坛,贴吧。。。最后,找到一丝灵感,复制了一份博友的程序,发现成功了!这次没有第一次的兴奋,但还是有那么一丝的成就感,很庆幸自己能够有这么好的运气。。。顺便把自己复制的程序的网址发出来:http://blog.csdn.net/yx_l128125/article/details/7884423
接下来的时间自己又看独立键盘,因为自己没有学习这个板子的经验,只有跟着视频的脚步,或许过来人更有体会,所以才会那样安排吧!因为以前自己对于51上的键盘花了很大一部分功夫在上面,而自己此次的32芯片也就来的比较快,大概一个小时的时间搞定了,此时自己感受到32芯片的调用库函数的简洁与方便,如果是自己强行写寄存器代码,那将是一个巨大的工作量。。。
  整个一天,对于自己的收获还算比较满意,希望明天能够继续保持!



------------------------


    由于某些原因,昨晚没时间更新。。。
    第一就是忙活了一下午,程序写出了,但是硬件执行的就是有问题,心难免会受伤,或许搞技术的就是这样的一种境地。。。如今自己似乎患上了社交恐惧症了,感觉跟机器打交道是那么的舒服,而每次遇到人之后,却不知所措,交流也不是,不交流也不是,所以每次都尽量避开人群。。。
   言归正传,谈谈昨天的学习之路吧。首先前天粗略看了一下视频,感觉这一章很混沌,就像自己学习c51的中断的时候的同样的感觉,因为个人学习过来,发现基础中偏难的就是那个中断的过程,想当初学51的时候,到处求人,问一些大神,差不多花了近10天才明白。或许就是这样给自己留下了阴影,所以在第一次看32的视频的时候先是粗略看看,探探路,通过比较网上已有的视频发现课时并不多。昨天回到工作地点静下心来学习,差不多一直坐了6个小时看视频一步一步做。期间各种错误,或许从一个初学者的角度来看这是夸张的,有些函数的结构多余那么一个空格都是错误的,让我感到有些质疑的是官方的固件库中有很多的错误,直接调用会报错,自己又一步一步重新核实,并改正。。。
   昨天快结束的时候,程序编译不错,但是硬件的相应有问题,最后,还是放弃了,因为有时脑袋的混沌会阻止自己的思想,直到自己今早再次捋了思路,发现在中断服务函数的现象写反了,再次烧写,就这样。。。。成功了!!!又够自己高兴一阵了!!!
   此次学习的是32的中断,
    自己写的按键相应led的程序:
     #include"stm32f10x.h"
  void led_gpio_init();//led灯的gpio函数的声明
  void key_gpio_init();
  void NVIC_Configration();//中断控制初始化
  void EXTI_Configration();//中断初始化
  void delay();//消抖延时初始化
void main()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部复用功能时钟
  key_gpio_init();//键盘函数的调用
  led_gpio_init();
  EXTI_Configration();//中断函数的配置
  NVIC_Configration();//中断控制函数初始化
  while(1);//等待

}
   void led_gpio_init()
{
    //led
      GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义引脚速度
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//定义引脚
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//定义输出模式
      GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
}
  void key_gpio_init()
{   
     //key
     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);
     GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义引脚速度
     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//定义读取引脚
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//定义上拉输入模式
     GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化
}
   voidEXTI_Configration()//外部中断初始化
  {
    EXTI_InitTypeDef  EXTI_InitStructure;
    EXTI_ClearITPendingBit(EXTI_Line7);//////
    //EXTI_ClearITpendingBit(EXTI_Line7); p的大小写
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7);//连接外部中断和引脚的关系/////
   //后面语句为固件库里面的有错误GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);
    EXTI_InitStructure.EXTI_Line = EXTI_Line7;//PB7在EXIT7上
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//模式为中断
    EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;//下降沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能
    EXTI_Init(&EXTI_InitStructure);//初始化
  }
   voidNVIC_Configration()//嵌套向量中断控制器
   {
   NVIC_InitTypeDefNVIC_InitStructure;//定义结构体
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择优先级组
  NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;//////////////定义属于第7组的中断频道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;//抢占式优先级位
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//从优先级位
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
  NVIC_Init(&NVIC_InitStructure);////////初始化
   }
   void delay()//延时函数1ms
   {
      int i=720000;
      for(;i>=0;i--);
   }
   voidEXTI9_5_IRQHandler()//中断函数行使函数
  {
     if(EXTI_GetITStatus(EXTI_Line7)==SET)//判断中断是否触发
     {
       EXTI_ClearITPendingBit(EXTI_Line7);//清空挂载在7线上的中断
       delay();//延时消抖
      {
        if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_7)==1)//引脚高低电平读取函数
         {
           GPIO_ResetBits(GPIOA,GPIO_Pin_7);
           //a7口为高电平
         }
         else
         {
          GPIO_SetBits(GPIOA,GPIO_Pin_7);  //a7口为低电平
         }
      }
     }

  }

-----------------------------------------------

   这几天一直没有更新!
  只因为这几天选路错误,一直耽搁了不少行程。所以到处寻相关的例程,中途在腾讯里面的视频看见有相关的视频已经全部传入网上,然而自己看的额视频是随意传上网上的,所以中间的视频有特别的跳跃之处。而后在那一直卡着不能动。然后呢无意之间在优酷上又看到相关的视频,发现中间有一节被跳过,就是定时器中断这一节,而我这最近的学的就是pwm,由于需要用到定时器,所以pwm一直把我前进的道路阻挡着,让个人十分苦恼,所以在此时自己深切体会到学习的道路上有人指导是那样的重要!!!
  经过三天的挣扎,重新回到定时器的学习当中,发现真的学习到了之前不知道的,所以学习就是这样一个事情,!!!定时器这块需要注意的就是period和prescaler这两个参数的关系。不过光是学习这个定时器自己也费了不少周张,由于自己的定时器中断服务函数出错,也让进度变得缓慢下来,好在最后改正了过来。
   接下来就是pwm的学习,发现还是有不少的难度,这东西或许对于老手来说根本不值得一提,但是对新手来说就是一大门槛,为此自己又是到处寻找论坛,到处找实例,好在各大博客的开通对于这个模式的操作有很多的实例,还是挺好的,又是近2天的时间,最后还是解决,在这里面的时候,自己最开始把ocinit当成输出比较初始化,实则是输出频道初始化的缩写。。。
   好了不说了,继续下一步usart的学习,发现这个块还是挺难。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:118084 发表于 2016-5-18 11:37 | 只看该作者
支持,继续记录下去。
回复

使用道具 举报

板凳
ID:168569 发表于 2017-4-4 20:22 | 只看该作者
觉得很神奇的是,我在2017年的清明节之前开始学习32,正好看到你的帖子,然后进度出奇的相似
回复

使用道具 举报

地板
ID:168569 发表于 2017-4-4 20:30 | 只看该作者
觉得很神奇的是,我在2017年的清明节之前开始学习32,正好看到你的帖子,然后进度出奇的相似
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表