UART共有三种操作方式,轮询方式、中断方式以及DMA方式。
芯片:STM32F103C8T6
应用管脚:
输出:PA0、PA1
USART1
配置界面
添加中断配置
添加DMA配置
代码应用
1.实现printf函数
/* USER CODE BEGIN 0 */
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* USER CODE END 0 */
/* USER CODE BEGIN 4 */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 4 */
2.轮询方式发送与接收
发送数据
uint8_t senddata[20]="This use Transmit.rn";if(HAL_UART_Transmit(&huart1,senddata,sizeof(senddata),0xFFFF) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
轮询接收采用阻塞式超时接收模式
uint8_t huart1_RxBuffer[20];
HAL_UART_Receive(&huart1, huart1_RxBuffer, 20,0x10);
3.中断方式发送与接收
增加接收中断回调函数
/* USER CODE BEGIN 4 */
/**
* @brief Rx Transfer completed callbacks.
* @param huart: Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart1)
{
Rx_flag=1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,(GPIO_PinState)!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0));
// if(HAL_UART_Receive_IT(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
// {
// /* Transfer error in reception process */
// Error_Handler();
// }
}
}
/* USER CODE END 4 */
发送数据
uint8_t senddata_IT[23]="This use Transmit IT.rn";
if(HAL_UART_Transmit_IT(&huart1,senddata_IT, sizeof(senddata_IT)) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
接收数据,调用此函数后,接收中断可执行一次。
uint8_t huart1_RxBuffer[20];if(HAL_UART_Transmit_DMA(&huart1,senddata_DMA, sizeof(senddata_DMA))!= HAL_OK)
{
Error_Handler();
}
if(HAL_UART_Receive_IT(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK) {/* Transfer error in reception process */ Error_Handler(); }
3.DMA方式发送与接收
增加接收中断回调函数(与中断方式相同)
发送数据
uint8_t senddata_DMA[24]="This use Transmit DMA.rn";
if(HAL_UART_Receive_DMA(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
接收数据(特征与中断方式相同)
if(HAL_UART_Receive_DMA(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
上一篇:基于STM32的HAL库学习(2)UART串口学习
下一篇:STM32使用esp8266和MQTT协议与OneNET平台进行通信
推荐阅读最新更新时间:2024-11-13 11:13
设计资源 培训 开发板 精华推荐
- 有奖直播:AC/DC 在 ATX 及 Server 电源解決方案及应用 报名开始啦!
- TI隔离技术知多少?答题赢好礼!
- 限时免费下载|NI《O-RAN简介》
- 泰克多媒体总线专题之《DDR Memory》,下载赢好礼!
- 是德科技:五招教您最小化合格/不合格的误判风险在线直播预报名、看直播、填问卷、好礼相送!
- 大比拼!DIY数字湿度计
- 有奖直播|罗彻斯特电子半导体全周期解决方案 助您应对供应链中断和元器件停产的挑战
- Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿
- TI有奖直播|如何进行更加快速、简单且成本更低的AI 摄像头应用的开发
- Microchip 直播|时间同步的必要性及其解决方案