stm32l4板卡测试4-usart测试
先上图
说实话,昨天今天都在搞printf,可惜没打通。
这里先把HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000);打印的发出来,
要打印的字符存在aTxBuffer里面。
先看程序1,串口配置
view plain
copy to clipboard
print
?
- #include "test_usart.h"
- #include "stm32l4xx_hal.h"
- #include "stm32l4xx_nucleo.h"
- #include "stdio.h"
- UART_HandleTypeDef UartHandle;
- voidUSART_CONF(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- __HAL_RCC_USART1_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- GPIO_InitStruct.Pin = GPIO_PIN_9;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_10;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init( GPIOA, &GPIO_InitStruct);
- UartHandle.Instance = USART1;
- UartHandle.Init.BaudRate = 115200;
- UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
- UartHandle.Init.StopBits = UART_STOPBITS_1;
- UartHandle.Init.Parity = UART_PARITY_NONE;
- UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- UartHandle.Init.Mode = UART_MODE_TX_RX;
- HAL_UART_Init(&UartHandle);
- }
- voidFill_Buffer(uint8_t *pBuffer, uint16_t BufferLenght, uint32_t Offset)
- {
- uint16_t IndexTmp = 0;
- for(IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ )
- {
- pBuffer[IndexTmp] = IndexTmp + Offset;
- }
- }
- #ifdef __GNUC__
- #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
- #else
- #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- #endif /* __GNUC__ */
- PUTCHAR_PROTOTYPE
- {
- HAL_UART_Transmit( &UartHandle , (uint8_t *)&ch, 1, 0xFFFF);
- returnch;
- }
最后一部分是准备做printf用的,暂时没成功。串口配置f4固件库一样,不再多说。
这里说下穿口初始化函数,cube库中有
HAL_StatusTypeDef HAL_UART_Init( UART_HandleTypeDef * huart )
HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart)
这样俩个初始化,关于区别一个关于UART,一个是USART,主要区别如下:
1、UART:universal asynchronous receiver and transmitter通用异步收发器
2、USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器
也就是说:UART的一般只能用于异步串行通讯,而名称为USART的既可以用于同步串行通讯,也能用于异步串行通讯。
在STM32CubeMX中测试了一下同步通信和异步通信,自动生成的代码中,果然:
1、在使用异步通信时,自动调用的是HAL_StatusTypeDef HAL_UART_Init( UART_HandleTypeDef * huart ) 初始化
2、在使用同步通信时,自动调用了HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart)初始化
再来看主函数
view plain
copy to clipboard
print
?
- intmain(void)
- {
- uint8_t i=0;
- uint8_t aTxBuffer[] =" ***奇点灭灵-2015-10-19 **** ";
- HAL_Init();
- SystemClock_Config();
- USART_CONF( );
- GPIO_CONF( );
- while(1)
- {
- HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
- HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000);
- HAL_Delay(500);
- }
- }
效果就是上图所示。 HAL_UART_Transmit就是串口发送函数,在函数的参数里有一个TXBUFFERSIZE,是要发送数组大小。
在
view plain
copy to clipboard
print
?
- #define TXBUFFERSIZE (COUNTOF(aTxBuffer) - 1)
- #define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
这里进行定义,计算。
大致就这样吧,printf功能还没实现,等实现了再说,路过晓得的望教导!