STM32学习心得


大纲

前沿:无论学习传统寄存器编程还是库函数编程,都学要学会看数据手册用户手册,实际工作中不可能手把手教你

每一个外设的函数或者寄存器怎么配,其实作为单片机工程师就是一个体力活,因为你只是在遵循芯片厂商的规则进行

配置一系列寄存器而已。在编程中要有一种变化的思维,第一点,比如使用某一个外设,需要配置其基本参数,如时钟,端口和

引脚,作为输入还是输出,作为传统输出还是服用功能输出。是否需要配置中断,以及设置中断优先级和某个外设中断

使能,编写实现功能的中断函数。第二点,一般情况下单片机与外界交换,无外乎就是收发,对于发送,需要检测其是否

发送成功,有发送成功的事件或中断标志位。接收,判断是否接受成功,如果是使用中断标志位,则在进入中断函数后,需要

清除中断标志位。最后,最重要的是逆行要实现怎么样的功能,单片机无外乎不就是引脚以及引脚的复用功能,如TIMADC

DACCAN、I2C、USART、SPI、USB等等。作为提升自己的方式,我们需要学习上位机开发,可以用C#开发上位机,也可以

用QT开发上位机。

       总之,嵌入式开发主要就是脸+脑  ==通讯协议  ===    舌头+手。其中脸是用户界面,脑是数据库  。舌头是传感器,手是电机。

他们之间形成交互,通过通讯协议进行传输数据。

     PLC就是大型的单片机,常常用于工业电机的控制。而运动控制板卡是工业机器人的控制。

 

1.学什么

2.怎么学

3.物理层面的基本电路

4.库函数的基本理念(HAL库和FW库)+内容概要

5.中断和事件的区别,一定要有中断吗?

6.串口存在的意义

7.TIM及其应用

8.WWDG 存在的意义

9.SYSTICK 存在的意义

 

1.学什么

(1)片上外设

如GPIO、TIM、EXTI、SYSTICK等

(2)模拟数字转换

如ADC\DAC

(3)通信协议

如I2C、USART/UART、SPI、TCP/IP、CAN等

 

2.怎么学

        嵌入式软件工程师做学硬件的话基础要会焊贴片芯片、贴片元件,这个很重要!!!而且要保证焊出来的板子可以正常工作,

出了问题自己去找出问题然后解决掉。要会使用软件绘制原理图和PCB。其他的知识个人觉得多做项目,可以是公司项目,也可以

自己做一些小制作,在这个制作过程中需要用到什么硬件知识再去学习,会更有效一点。

 

3.物理层面的基本电路

1)推挽模式:

      状态:1/0

2)开漏模式:上拉电阻电压由负载额定电压决定。  

      状态:0或截止

3)  斯密特触发器

      TTL电平,输入后输出有不同的比较值

当选择输入时,如果大于该比较值,则触发器输出1;

                          如果低于该比较值,则触发器输出0;

4)上拉/下拉输入电路

      其意义是保证引脚电平在一个确定的状态下,常常配合开关或其他触发方式使用。

                 

 

4.库函数的基本理念(HAL库和FW库)

       固件库是指“STM32标准函数库”,它是由ST公司针对STM32提供的函数结构。即API(application program Interface),开发者可以调用函数接口来配置STM32的寄存器。

     

(1)相似之处:主要由CR、SR、DR(事件或中断)组成,具体如下表所示

CR:配置相关外设或协议初始化

SR:   判断引脚的状态

DR:  读取或写入数据

 

寄存器

对应库函数命名

CR

Control

Register

对一些外设初始化\使能一些事件中断

xxx_Init()  如USART_Init()、GPIO_Init()

xxx_cmd()     如 USART_IT()、TIM_Cmd()

DR

Date

Register

发送和接收数据

Xxx_SendData()、xxxReceiveData()

SR

Situation

Register

一些事件或中断的标志位

Xxx_GetFlagStatus()、xxx_GetITStatus()

Xxx_ClearFlag()、xxx_ClearITPend-ingBit()

 

(2)固件库的基本内容

     1.汇编编写的启动文件

  名称:Startup_stm32f10x_hd.s  

       主要作用:设置C语言运行环境。

       主要内容:设置堆栈指针,设置PC指针,初始化中断向量表,设置系统时钟systemInit。

      2.时钟配置文件

        System_stm32f10x.c; 把外部的HSE(外部高速时钟)=8M,经过锁相环配置成72M。

     3.外设相关的

        Stm32f10x.h  //peripheral register reflect  GPIOA_BASE 0XFFFFFFFF

外设基地址,以及相应的寄存器的结构体  以及由外设基地址组成的结构体函数。

实现相应功能的库

       Stm32f10x_xx.c       //外设的驱动函数库文件

       Stm32f10x.xx.h       //头文件,存放外设(GPIOx)的初始化结构   

       Stm32f10x_conf.h     //包含所有外设的头文件,可以选择是否启用

      4.专门存放中断服务函数的C文件

      stm32f10x_it.h

      stm32f10x_it.c

(注:中断服务函数可以随意放在其他地方,并不一定要放在.c文件中)

 

5.中断和事件的区别

         中断需要中断服务函数NVIC等一些列配置,而事件不需要软件,它是直接通过硬件方式联动。

               

       图中输入线1(I/O口)信号进入,通过信号检测(触发方式):(上升沿、下降沿、上升下降沿检测),

进入3之前,是设置软件中断/事件。

       中断通过NVIC控制和中断屏蔽器相与。

        事件与事件屏蔽寄存器相与,通过脉冲发生器 产生电平的反转实现时间产生

      一定要有中断吗?

     (1)设备与外界通信,如CAN,上位机发送消息过来,这时候程序如果运行很慢,错过消息,

就不自信串口的命令,最好写入中断。

     (2)你会知道什么时候产生中断吗?

          只有外界触发时,如外部中断导致引脚电平变换,内部中断定时器,计时到了产生中断,CAN通信

接收到消息产生中断,这些都是硬件去检测,本质检测的是寄存器是否被置位,至于你(人)不知道是否

什么时候中断,中断之所以有优先级,是因为需要考虑很多,如火车行驶中前面两个路口,有一个人和多个人

,死一个人和死多个人,当然选择死一个人。

    (3)对于嵌入式工程师,只要调用其库函数接口可以,如CAN发送和接收的接口,自己在封装下可以使用,

发送即可字节自己定义。对于串口,重定向后直接使用库函数发送和接收,自己封装无外乎是发送一个字节,还是发送多个字节而已。

 

6.串口的作用

1)调试程序,上位机与下位机交互

2)烧录程序

7.TIM及其应用

 

 

8.WWDG 存在的意义

 

 

9.SYSTICK 存在的意义

             系统定时器是属于作为CM3/4内核外设,内部嵌套在NVIC中。系统定时器是一个24bit的向下递减的计数器。

             这里需要考虑两点:计数器每计数一次的时间:与配置其始终有关。

                                              产生一次中断的时间:计数24次后的时间。

//设计流程
//将core_cm3/4中有关systick函数移植过来
//1.配置重装载值,复位,以及定时器NVIC配置    config_systicks(xxx)
//2.初始化systicks,可以确定多久中断一次
//3.配置中断函数,并将它发到it.h中  ,其中参数变量在延时函数中赋值
//4.编写相应的延时函数
//5.根据要求调用系统滴答函数

 

未完待续

更新日期:2021-10-13 \19:54:44 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM