历史上的今天
今天是:2024年12月21日(星期六)
2018年12月21日 | STM32HAL库中断模式串口初始化收发数据
2018-12-21 来源:eefocus
hal库里面路径:STM32Cube_FW_L0_V1.10.0\Projects\STM32L053C8-Discovery\Examples \UART\UART_TwoBoards_ComIT
工程是串口1中断收发模式配置
UART_HandleTypeDef UartHandle; //串口结构体变量
UartHandle.Instance = USARTx; //初始化串口实例 USART1
UartHandle.Init.BaudRate = 9600; //设置波特率
UartHandle.Init.WordLength = UART_WORDLENGTH_8B; //8位数据位
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; //RX和TX模式
if(HAL_UART_Init(&UartHandle) != HAL_OK) //使能结构体变量
{
Error_Handler();
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart) //自己写的函数,对串口引脚初始化 在 HAL_UART_Init函数里面自动调用 不用声明,
{
GPIO_InitTypeDef GPIO_InitStruct;
USARTx_TX_GPIO_CLK_ENABLE(); //串口引脚时钟使能
USARTx_RX_GPIO_CLK_ENABLE();
USARTx_CLK_ENABLE(); //串口时钟使能
/* UART TX GPIO pin configuration */
GPIO_InitStruct.Pin = USARTx_TX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
GPIO_InitStruct.Alternate = USARTx_TX_AF; //引脚功能复用 来作为串口1的TX
HAL_GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStruct);
/* UART RX GPIO pin configuration */
GPIO_InitStruct.Pin = USARTx_RX_PIN;
GPIO_InitStruct.Alternate = USARTx_RX_AF;
HAL_GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStruct);
/* NVIC for USART1 */
HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1); //设置中断优先级
HAL_NVIC_EnableIRQ(USARTx_IRQn); //使能中断
}
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) //自己写函数 失能串口功能
{
失能外围时钟
将GPIO和NVIC配置恢复到默认状态
}
//it.c中的中断函数
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&UartHandle);
}
//串口配置完成
********************************************************************************
使能一下串口接收函数
uint8_t aRxBuffer, //
HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer,1); //串口配置完成后使能一下串口接收函数
发送函数 怎么使用可以自己封装
uint8_t aTxBuffer[] = " ****UART_TwoBoards_ComIT**** ";
HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer,strlen(aTxBuffer));//把aTxBuffer数据发送出去
//中断回调函数 程序自动调用 收到的数据会存储到Data_BUF数组中,每次使用完记得把 FramLength清零 变量全局
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(FramLength<(BUF_MAX_LEN-1)) //判断接受长度
Data_BUF[FramLength++]=rxdata;
HAL_UART_Receive_IT(&usart1_handler,&rxdata,1); //每次接收完之后重新使能串口接收接受一个字节
}
下一篇:STM32中断控制的流程
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 本篇技术解答说明了利用Hitachi HD44780或一个兼容控制器在LCD和VFD显示器上创建用户字符的方法 这里所描述的代码建立在ICOM.LIB 库里的显示函数基础上 ICOM.LIB是一个智能终端驱动库&nb ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 巨盛CSC3800 datasheet:带USB、SD、MMC、MS controler,带MP3/WMA decoder. 网上很难找的哦,需要的下吧。 … 查看全部问答> |
|
给UPS电源配备一台理想的适用的稳压电源需注意以下几个方面: (1).稳压电源必须提供可靠的市电过压输入保护功能。除参数稳压器在极限工作条件下,可在市电输入电压高达300V时长期向负载提供220V稳压电源外,其它几种交流稳压电源所允许的市电上限都 ...… 查看全部问答> |
|
看到书上说 64位机的内存就可以认为是无限的(科学家估计已知的宇宙有2的70多次的粒子),但64的意思应该是说有64个位吧,但这和内存是怎么产生关系的?看到书上知道64个位有64个数据线,可是地址线和位数的关系就不明显了,一个地址用 ...… 查看全部问答> |
|
继之前三篇体验心得 BB Black初体验一 BB Black初体验二 BB Black初体验三 今天花了一整天终于解决把μSD中的debian系统给跑起来了。十分开心,跟大家分享下。 首先,要说明下子,一是μSD卡中运行debian,而不是烧写到eMMC中,珍爱板子,少擦 ...… 查看全部问答> |
|
TMS320F28335项目开发记录8_28335之GPIO引脚 GPIO(General-Purpose Input/Output)——通用输入/输出口; DSP28335 GPIO模块分为三类IO口:PORTA(0-31),PORTB(32-63),PORTC(64-87) 对GPIO模块的设置主要通过三类寄存器来完成,分别是:控制寄存器、数据寄存器、 ...… 查看全部问答> |
|
用ULN2003做8路舵机驱动电路,ULN2003 1——7脚接单片机输入PWM,8——16输出给舵机 ,像图这样接线可以吗?第一次做这个,求大神助攻 … 查看全部问答> |




