STM32学习手记3——串口、调试

STM32可以通过串口、JTAG和SWD口进行烧写和调试。

一些概念​

盗版JLINK不能进行固件升级!盗版JLINK不能进行固件升级!盗版JLINK不能进行固件升级!

​通过串口烧写: 在系统内部存在一片bootloader,类似单片机的ISP系统。可以通过设置BOOT引脚使系统上电后进入bootloader。如果在bootloader中预先写好相应的程序,即可通过串口将固件输入给bootloader,再由bootloader写入FLASH,完成在线串口烧写。一般开发板上BOOT引脚会接在串口的DTR和RTS引脚上,方便串口工具进行烧写和重启。

重定向输出函数:在库函数中有printf();函数,默认功能是在显示器上回显调试信息。该指令可以方便的输出字符串、符号和各种数据类型。printf()函数默认是调用int fputc(int ch, FILE *f)函数进行输出的。可以通过重定义fputc()函数使输出重定向到串口上。

串口的使用

STM32的串口:

STM32-M3共有4个串口:USART1-USART4。

初始化结构体​:

​ USART_InitStructure.USART_BaudRate = bound;//波特率9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;                       //数据长度8bit

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_Rx | USART_Mode_Tx;             //发送、接收模式

​控制结构体:

typedef struct

{

  __IO uint16_t SR;            //状态寄存器

  uint16_t  RESERVED0;

  __IO uint16_t DR;     //数据缓存寄存器,读、写实际上分别是两个寄存器

  uint16_t  RESERVED1;

  __IO uint16_t BRR;       //波特率设置寄存器

  uint16_t  RESERVED2;

  __IO uint16_t CR1;     //控制寄存器1

  uint16_t  RESERVED3;

  __IO uint16_t CR2;         //控制寄存器2

  uint16_t  RESERVED4;

  __IO uint16_t CR3;     //控制寄存器3

  uint16_t  RESERVED5;

  __IO uint16_t GTPR;     //保护时间和预分频寄存器

  uint16_t  RESERVED6;

} USART_TypeDef;

​实际上每个变量就是一个寄存器的。写入、读取SR,或者DR,实际上就是制作操作寄存器。

#define USART1              ((USART_TypeDef *) USART1_BASE)​

由此可知,实际上这个控制结构体里的每个变量,都指向控制寄存器的实际地址。

​操作函数:

USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)​;//初始化函数

USART_DeInit(USART_TypeDef* USARTx);//串口复位

USART_SendData(USART_TypeDef* USARTx, uint16_t Data);//发送数据

​uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//读取数据

​FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);//读取状态

​USART_Cmd(USART1, ENABLE); //使能串口1

​USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,FunctionalState NewState);//中断设置函数

​ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);//中断状态获取函数

猜你喜欢

转载自blog.csdn.net/laoponline/article/details/111049841