历史上的今天
今天是:2025年04月22日(星期二)
2018年04月22日 | STM32CubeMX:UART操作
2018-04-22 来源:eefocus
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.\r\n";
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.\r\n";
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.\r\n";
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();
}
史海拾趣
|
#include\"windows.h\" #include srand( (unsigned)time( NULL ) ); cout=rand()%cout; 但是报错 gobanggame.obj : error LNK2019: unresolved external symbol _time referenced in function \"public: struct tagPOINT __thiscall gobangga ...… 查看全部问答> |
|
最近相当的崩溃阿,设计一点进展都没有,只好来求助各路达人了。 我要实现一个远程监控系统,终端与中心采用GPRS通信。目前我负责终端采集和通信部分。通信采用了华为的GPRS模块GTM900,自带TCP/IP协议的。我知道,只要用单片机串口写AT命令给模 ...… 查看全部问答> |
|
问题 100分: eVC4.0 新建一个工程,不能选择CPU 问题: eVC新建一个工程,CPU类型列表全部是灰的,不能选。 环境: windows 2000 SP4 English 安装顺序: 1.activeSync 4.5 2.eVC4 (顺带安装了 Standard SDK for Windows CE.net) 3.eVC4 SP4 4.Windows Mobile SDK 2003 还有,打开eVC4.0 的 ...… 查看全部问答> |
|
我现在想在ARM9上使用WINCE,目前只接触过ARM7,电脑上安装了EVC(PB和SDK都没安装),今天初步运行EVC提示:ARM4 CPUcannot to run,要求安装SDK,我应该安装那个SDK包?另外是不是一定要与ARM9开发板连接?… 查看全部问答> |
|
如图左边是+15v和-15v的电压源,右边是其后接的的电阻桥。电阻桥后面就是测量电压变化的测量放大电路。我每块模块都是好的,就是将电阻桥和电压源电路连起来的时候,电压源的输出电压会降到2v~3v的样子。这是不是电流匹配的问题啊??请问各位,有 ...… 查看全部问答> |




