• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32串口初始化问题

那一场雪 2018-09-21 浏览量:1051
32的串口初始化以后,应该根据什么能够找到他对应的中断服务程序?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:16
  • 根据对应的中断入口,32的各个外设和内核的中断入口都在启动文件中已经定义好了相关名称,在你以后写程序的时候,外设的中断函数的名称就必须要和启动文件(点s文件)中断向量表中的名称一致。否则当你的外设发生中断后,会进入死循环状态。

  • 根据配置的串口的中断向量号。比如USART3中断配置,USART3_IRQn就是中断号。

        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

  • 看你应用那组串口组啊,每个组都有对应的中断处理入口进程,这个是标准库中就定义好的(对应名称一般不能改的)。

  • 中断服务程序的名称都是固定的,不能自己随便编,

    因为编译的时候要将对应的服务程序放在固定的中断入口地址下,随便起的名字编译器不可能会认识,

    并且每一种不同型号的片子所对应的服务程序名不同,

    比如中容量的片子只支持到EXTI4_IRQHandler,EXTI5_IRQHandler好像就没有了。

    这些入口函数名具体是在哪个文件中同地址对应起来的我还没有找到,但是你可以从芯片的启动文件中看到,

    比如中容量的片子就在startup_stm32f10x_md.s中可以看到所有可用的服务程序入口名,

    编写是照着里面的写就好了(当然服务程序的具体内容还是你自己写,放在stm32f10x_it.c里)

  • 串口初始化时会向单片机注册一个中断向量在指定位置,向量里面值存储了中断服务函数的地址

  • 它的中断服务程序一般放在那个it.c的文件里面的,你可以去找一下那个文件

  • 中断服务程序是在*_it.c 中,可以找到类似 xxxx_IRQHandler的中断服务函数。

  • 串口中断服务程序的名称是USART_IRQ_Handler(),里面的内容需要自己写。

  • 在你的初始化里面找到初始化了哪个串口,根据你的 串口号找到对应的串口中断服务函数

  • 从中断入口进去找,一般是有handler的函数,里面有个 callback 函数, 中断处理在 handler , 中断服务函数再 callback, 使用中断时候,需要自己实现 callback ,也就是给 handler 添加代码而已。 handler 是处理系统硬件建构相关的是库实现的,这个不用管, 自己实现callback 放自己代码就行

  • 要根据你的中断函数进行查找,查找到对应的端口号和设备地址

  • 相关中断都会在startup文件中进行描述。

  • 在你的中断向量表里面进行相关的函数定义和操作

  • 一般都是在启动文件配置的,在你的启动文件配置好参数就可以

相关问题

问题达人换一批

stm32串口初始化问题