[单片机]STM32 HAL库函数USART、DMA和几个嘎达马西的说明
STM32f103
SPI1_NSS/USART2_CK是同一个管脚
usart2同步通讯时和SPI1的NSS冲突
PWM
TIM_OCMode_Timing是在比较成功后不在对应输出管脚上产生输出。
TIM_OCMode_Toggle是在比较成功后翻转对应输出管脚上的电平。
TIM_OCMode_Active 输出比较主动模式 (匹配时设置输出引脚为有效电平,当计数值为比较/捕获寄存器值相同时,强制输出为高电平
TIM_OCMode_Inactive 输出比较非主动模式 (匹配时设置输出引脚为无效电平,当计数值为比较/捕获寄存器值相同时,强制输出为低电平)
DMA
/**
DMA 开始传输
参数 1:DMA通道
2: 源地址
3: 目的地址
4数据长度
**/
HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
/**
DMA 开始中断传输
参数 1:DMA通道
2: 源地址
3: 目的地址
4数据长度
**/
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
/**
终止DAM传输
参数1: DMA 通道
**/
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
/**
终止DAM中断传输
参数1: DMA 通道
**/
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);
/**
* @brief Register callbacks 注册DMA回调函数
* @param hdma: DMA通道
* @param CallbackID: 回调函数参数
* @param pCallback: 私有回调函数 ,指向DMA_HandleTypeDef 结构体.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma))
/**
* @brief UnRegister callbacks 注销DMA回调函数
* @param hdma: DMA 通道
* @param CallbackID: 回调函数的参数.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID)
/**
* @brief DMA轮询传输完成
* @param hdma: DMA通道
* @param CompleteLevel: 完成程度
* @param Timeout: 最大超时
* @retval HAL status
*/
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout)
//---------------------------------------------------------------------------------------------------------------------
UART
__HAL_DMA_GET_COUNTER(__HANDLE__) //返回当前DMA中,传输的剩余数据;
/** @brief 检测Uart标志
* @param usart或者uart句柄
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5)
* @arg UART_FLAG_LBD: LIN Break detection flag
* @arg UART_FLAG_TXE: Transmit data register empty flag 传输数据寄存器为空标志
* @arg UART_FLAG_TC: Transmission Complete flag 传输完成标志
* @arg UART_FLAG_RXNE: Receive data register not empty flag 接收数据寄存器不为空标志
* @arg UART_FLAG_IDLE: Idle Line detection flag //空闲标志
* @arg UART_FLAG_ORE: Overrun Error flag //溢出错误
* @arg UART_FLAG_NE: Noise Error flag
* @arg UART_FLAG_FE: Framing Error flag //帧错误标志位
* @arg UART_FLAG_PE: Parity Error flag //奇偶错误标记
* @retval The new state of __FLAG__ (TRUE or FALSE).
*/
//串口标志
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
/** @brief
清除空闲中断请求标志
*/
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__)
/*
uart发送
参数1: uart句柄
2: 发送数据的地址
3:发送的字节数
4:超时
*/
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
/*
uart接收
参数1: uart句柄
2: 接收数据的地址
3:接收的字节数
4:超时
*/
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
/*
uart中断发送
参数1: uart句柄
2: 中断发送数据的地址
3:中断发送的字节数
*/
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/*
uart中断接收
参数1: uart句柄
2: 中断接收数据的地址
3:中断接收的字节数
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/*
uart DMA发送
参数1: uart句柄
2: DMA发送数据的地址
3:DMA发送的字节数
*/
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/*
uart DMA接收
参数1: uart句柄
2: DMA接收数据的地址
3:DMA接收的字节数
*/
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/**
* @brief 暂停DMA传输。
* @param huart uart句柄
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
/**
* @brief 恢复DMA传输。
* @param huart uart句柄
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
/**
* @brief 停止DMA传输。
* @param huart uart句柄
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
/* 传输终止功能 */
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) //终止传输
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);//终止发送
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);//终止接收
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart); //终止中断传输
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);//终止中断发送
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart); //终止中断接收
/**中断回调函数**/
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //处理UART中断请求。
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //发送完成回调。
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);//发送一半回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //接收完成回调。
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//接收一半回调函数
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); //uart错误回调
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); //UART中止完成回调。
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);//UART中止发送完成回调。
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);//UART中止接收完成回调。
/** @brief Checks whether the specified UART flag is set or not.
* @param __HANDLE__ specifies the UART Handle.
* UART Handle selects the USARTx or UARTy peripheral
* (USART,UART availability and x,y values depending on device).
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5)
* @arg UART_FLAG_LBD: LIN Break detection flag
* @arg UART_FLAG_TXE: Transmit data register empty flag
* @arg UART_FLAG_TC: Transmission Complete flag
* @arg UART_FLAG_RXNE: Receive data register not empty flag
* @arg UART_FLAG_IDLE: Idle Line detection flag
* @arg UART_FLAG_ORE: Overrun Error flag
* @arg UART_FLAG_NE: Noise Error flag
* @arg UART_FLAG_FE: Framing Error flag
* @arg UART_FLAG_PE: Parity Error flag
* @retval The new state of __FLAG__ (TRUE or FALSE).
*/
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
//----------------------------------------------------------------------------------------------------------------------
ADC
//检查指定的ADC中断源是否启用或禁用。
#define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)
/** @brief 获取所选ADC的标志状态
* @param __HANDLE__: ADC handle
* @param __FLAG__: ADC flag
* This parameter can be any combination of the following values:
* @arg ADC_FLAG_STRT: ADC常规组开始标志
* @arg ADC_FLAG_JSTRT: ADC注入组启动标志
* @arg ADC_FLAG_EOC: ADC端常规转换标志
* @arg ADC_FLAG_JEOC: ADC结束的注入转换标志
* @arg ADC_FLAG_AWD: ADC模拟看门狗标志
* @retval None
*/
#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__)
/** @brief 清除ADC的挂起标志
* @param __HANDLE__: ADC handle
* @param __FLAG__: ADC flag
* This parameter can be any combination of the following values:
* @arg ADC_FLAG_STRT: ADC常规组开始标志
* @arg ADC_FLAG_JSTRT: ADC注入组启动标志
* @arg ADC_FLAG_EOC: ADC端常规转换标志
* @arg ADC_FLAG_JEOC: ADC结束的注入转换标志
* @arg ADC_FLAG_AWD: ADC模拟看门狗标志
* @retval None
*/
#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__)
/**
* @brief 测试常规组转换触发器是否为软件启动 或外部触发.
* @param __HANDLE__: ADC handle
* @retval SET (software start) or RESET (external trigger)
*/
#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__)
/**
* @brief 清除ADC错误代码(设置为错误代码:“无错误”)
* @param __HANDLE__: ADC handle
* @retval None
*/
#define ADC_CLEAR_ERRORCODE(__HANDLE__) \
((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)
...
/**
* @brief 启用ADC连续转换模式。
* @param _CONTINUOUS_MODE_: Continuous mode.
* @retval None
*/
#define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_)