CODE_STM32

如何学习

学前准备

  1. 入门级视频教程:鑫鑫stm32 初学者视频教程,PS:最好先下个keil uvision4安装上

  2. 进阶级视频教程:刘洋老师边讲边写stm32

    • 编程前还需要一本stm32库函数手册。

    • 没有开发板也没事,IDE里面有仿真器,但最好有一个开发板。因为只有软件,不会接线配电平什么的也不行

  3. 学习套路

    • 首先,把片上外设学一遍,就ok了

    • 其次,通过做项目练习综合使用

    • 最后,进阶的话可以看看寄存器级的开发,以及内部储存空间的分配(可以试着写写iap)

  4. 注意事项

    • 一开始不着急,可以先把程序整明白。就是学会怎么启动以及配置各个外设就行了。官方的库函数都已经封装好了,多数情况下都不需要直接操作底层的寄存器。如果官方的库里没有这个功能的代码,就只能自己通过设置对应寄存器解决

    • 教程不针对某一块特定的开发板,因为说白了单片机就是一芯片,开发板无非就是把片上外设的引脚印出来接了LED什么的东西,自己也能做的

    • 学的时候记得看电路图,如果你想做开发板上的实验的话,一定要有对应的电路图,因为不同板子GPIO的引脚配置不一样

  5. 资料整理

    • 刚刚给你的手册既有库函数的,也有寄存器的。你可以直接从库函数开发学起,但一定要有寄存器的概念

    • XCOM是烧写片上程序的时候用的,因为现在的板子大多用usb口,都不是Jlink的,所以就用XCOM往板子上烧写,缺点就是没法实时调试。一个Jlink正版仿真器成本有点高,你一开始也未必用得上

  6. 首要做的事情

    • 先从最基本的写程序开始吧,小的程序IDE里调试过了上板子基本就不会有问题

    • 等你把片上外设都学完了会用了之后再跟你说我做的那个IAP实验吧,那个作为进阶练习,可以让你对单片机理解更深一层

  7. 细节

    • 加油,别放弃。看教程的时候耐心点,多总结,多记笔记,有好处

    • 视频有点长,开始的时候可以边讲边写,后来有了基础后建议你看清楚外设的使用流程后自己写,不懂的地方再回头对照。

    • 主要就是使用流程、配置参数这些环节记准了就没问题,一些小细节不必深究。千万别亦步亦趋只跟着抄代码,那样看完视频也学不会的。

    • 多查手册,多查手册,多查手册


搭建环境

  1. 安装jlink驱动器。如果能够在设备管理器中看到,jlinkdrive说明jlink的驱动安装成功了。
  2. 安装keil5,但是需要安装连个legacy support,这个可以根据keil5的提示到给出的链接上下载,把那两个都下载下来,然后安装。
  3. 按照操作步骤将程序下载到开发板上即可。

    GPIO

  4. General Purpose Input Output.称为总线扩展器。如果外设有n只脚的话,那么gpio占了1/n.而好处是,能够通过软件编程设置gpio的高低电压,进而控制外设。

  5. stm32中共有7个gpio,每个gpio有16个引脚。
  6. 在编程中如果要使用gpio的话。

    • 创建gpio结构体变量。
    • 在板子上需要要控制的外设的引脚,然后看到对面,如果是A11,那么代表着该外设是GPIOA的11号管脚。那么就要使用GPIO_Init(GPIOA, &GPIO_InitStructure);进行初始化。使用GPIO_SetBits(GPIOA, GPIO_Pin_11);对该gpio的11号引脚进行赋值。

      注意

  7. 使用jlink调试的时候需要将boot调节到flash上即可。

  8. 使用串口调试的时候,方式是不同的。
  9. 板子需要进行供电,使用USB TO UART口进行供电就行,另一端直接连接在电源上即可。
  10. 跨文件引用的函数不要使用static进行修饰

    尚未理解的代码

    ///这段代码适合等头脑清醒的时候进行阅读
    #define LED1_TOGGLE digitalToggle(GPIOB,GPIO_Pin_0)
    #define LED1_OFF digitalHi(GPIOB,GPIO_Pin_0)
    #define LED1_ON digitalLo(GPIOB,GPIO_Pin_0)

    #define digitalHi(p,i) {p->BSRR=i;}
    #define digitalLo(p,i) {p->BRR=i;}
    #define digitalToggle(p,i) {p->ODR^=i;

    尚需掌握的技能

  11. 调试

    中断

  12. NVIC(Nest Vectored Interrupt Controller内嵌向量中断控制器)。

  13. EXTI(外部中断)
  14. 将gpio作为中断的处理流程
    • GPIO初始化
    • 将gpio脚连接到extiline上。
    • exti初始化
    • nvic初始化
  15. 当中断到来后

    • 清除gpio寄存器中的信号量。
    • 清除exti上的信号量。

      头文件

  16. 头文件是要书写的,相应的.c文件需要引用的头文件全部包含在.h头文件中,在.c文件中只需要包含响应的.h文件即可,这样的话,在编译相应的.c文件的时候.h文件已经进行了编译。当在main函数中进行包含的时候不会再次进行编译,但是已经告诉main函数,要把这个文件包含进来,而这个文件中有响应函数的声明。

    SysTick

  17. 所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。

    常用术语

  18. 微控制单元(Microcontroller Unit;MCU)

    需要解决的问题

  19. 通过串口未能成功将文件下载到开发板上。

    ADC

  20. 参考电压:测量物体的长度要用卷尺,精确测量要用游标卡尺,同理,ADC 测量电压也要有标准电压做基准。如八位并行比较型 ADC ,把参考电压均分为 256 层,就好像卷尺的刻度,输入的待测电压与哪一个分层相等,数值就知道了。

    经验

  21. 下一次在进行32的编程的时候,直接把头文件中的结构体的数据成员复制过来,这样简直就是太方便了,因为每个数据成员都有相应的十分详细的解释。

    与C语言不同之处

  22. C语言中的unsigned long的个格式化输出占位符是lu;但是在stm32中编译环境是Keil中的时候就变成了ul。这是自己不能够理解的地方。