LPUART是一种UART,它可以在有限的功耗下实现双向UART通信。只需要32.768 kHz LSE时钟来启用高达9600包的UART通信。当LPUART由不同于LSE时钟的时钟时钟源时钟时,可以达到更高的波特率。即使微控制器处于低功耗模式,LPUART也可以等待输入的UART帧,同时能耗极低。LPUART包括所有必要的硬件支持,以使异步串行通信成为可能与最小的功耗。它支持半双工单线通信和调制解调器操作(CTS/RTS)。它还支持多处理器通信。DMA(直接存储器存取)可用于数据传输/接收。全双工异步通信NRZ标准格式(标记/空间)
可编程波特率从300波特到9600波特,使用32.768 kHz时钟源。
•通过使用更高频率的时钟源,可以实现更高的波特率。两个内部FIFO来传输和接收数据,每个FIFO可以被软件启用/禁用,并附带FIFO状态的状态标志。
•双时钟域与专用的内核时钟的外设独立于PCLK。
•可编程数据字长度(7或8或9位)
可编程数据顺序与MSB-第一或LSB-第一移动可配置停止位(1或2停止位)
单线半双工通信使用DMA接收/传输字节的连续通信在保留SRAM使用集中DMA缓冲。
•发射器和接收器的单独启用位为传输和接收的独立信号极性控制可交换Tx/Rx针脚配置调制解调器和RS485收发器的硬件流量控制
从字面上看这款LPUART十分强大,强大到有点超乎我的想象。因为它是在低功耗下可以运行的。以前想都不敢想。
首先,选则LPUSART3,有的看官会问为什么选LPUSART3,我只是为了我引线方便。
在生成代码的高级选项里选择用LL库,不用LL库好像搞不了LPUSART
然后就可以外接一个USB转串,来测试一下这个LPUSART3好用不啦?
我是个报喜不报忧的人,大家看到的,是我发0X55时的截图。
我发别的就不这么理想,有不对的地方,我想是同运行时钟有很大的关系。
以下是代码,不断地发0X55,而这个0x55在程序上面定义的数组。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(1000);
if(my_flag == 1)
{
my_flag = 0;
BSP_LED_Toggle(LED_GREEN);
HAL_Delay(1000);
}
for (index = 0; index < sizeof(aTextInfo); index++)
{
/* Wait for TXE flag to be raised */
while (!LL_LPUART_IsActiveFlag_TXE(LPUART3))
{
}
/* Write character in Transmit Data register.
TXE flag is cleared by writing data in TDR register */
LL_LPUART_TransmitData8(LPUART3, aTextInfo[index]);
/* Wait for TC flag to be raised for last char */
while (!LL_LPUART_IsActiveFlag_TC(LPUART3));
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
|