STM32、串口、一键下载

串口这个让我研究了两天。


STM的串口是USART是可以同步也可以异步,一般用异步。STM32、串口、一键下载_第1张图片

可以看出 只有将串口拉低,才能进行传输。另外 串口传输是一位一位传的,可以通过中断函数判断。每发一位,中断一次。



程序里对串口操作

1、GPIO时钟使能,USART时钟使能

2、串口IO模式,一个模拟输入,一个复用推挽输出。

3、USARTinit: 96、n、8、1等设置

4、NVIC中断优先级

5、涉及的库函数:

RCC_APB2PeriphClockCmd()

GPIO_Init()

USART_Init()

USART_Cmd()

USART_ITConfig()

NVIC_Init(&NVIC_InitStructure)

USART_SendData()

USART_GetFlagStatus()

void USART1_IRQHandler (void)

USART_GetITStatus(

USART_ReceiveData()

6.通过研究发现,将DTR变为低电平,即可正常传输。


7、仔细研究分析后。每次下载程序后,需要设置DTR。(通过usb一键下载程序的原理。)

我在程序中设置串口的模拟输入为低电平,并不能改善此现象。接着我发现,此开发板下载程序为usb下载,ISP模式。

从原理图可知L2303的RTS控制B0,DTR控制RST. 
我们要达到下载的目的,就必须先让RTS拉高B0(设置B0为1),然后再让DTR控制RST为低(STM32为低电平复位).然后再释放RTS为高(停止复位),然后再开始串口下载代码(此时B0可以为高,也可以为低).  

DTR电平置低(-3--12V),复位(DTR接了RST) 
RTS置高(+3-+12V),选择进入BootLoader(RTS接了B0) 
...延时100毫秒 
DTR电平变高(+3-+12V)释放复位(释放复位,但是此时B0为高,所以进入ISP模式) 
开始连接...4, 接收到:1F (连接成功)  转自——正点原子


所以每次下载程序后,DTR都为低。

然而DTR为高时,数据终端就绪,才能进行传输。所以需要拉高DTR位。



你可能感兴趣的:(STM32)