Windows 10 20H2
HLK-W806-V1.0-KIT
WM_SDK_W806_v0.6.0
摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》
7816/UART 控制器
设备端符合 APB 总线接口协议
支持中断或轮询工作方式
支持 DMA 传输模式,发送接收各存在 32-byte FIFO
DMA 只能按字节进行操作,最大 16-burst byte DMA 操作
兼容 UART 以及 7816 接口功能
串口功能
波特率可编程
5-8bit 数据长度,以及 parity 极性可配置
1 或 2 个 stop 位可配置
支持 RTS/CTS 流控
支持 Break 帧发送与接收
Overrun,parity error,frame error,rx break frame 中断指示
7816 接口功能
兼容 ISO-7816-3 T=0.T=1 模式
兼容 EVM2000 协议
可配置 guard time(11 ETU-267 ETU)
正向/反向约定可软件配置
支持发送/接收奇偶校验及重传功能
支持 0.5 和 1.5 停止位配置
下载口
W806 芯片默认 UART0 为下载口,芯片无固件初始下载时,直接连接 UART0 接口,通过相关下载软件即可实现固件下载。当芯片内有固件,再次进入下载模式,可以通过拉低 BOOTMODE,然后上电进入下载模式。下载完成后去掉 BOOTMODE 拉低的操作,需要重启,固件才能运行。
库函数
函数
打开wm_uart.h,有如下的函数声明:
//初始化所用串口的波特率、数据位、停止位、校验位、模式等
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
//将初始化之后的串口恢复成默认的状态–各个寄存器复位时的值
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
//串口发送数据,使用超时管理机制
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//串口接收数据,使用超时管理机制
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//串口中断模式发送
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/**
* 以中断方式接收一定长度的数据.
* 注意:pData指向的地址,空间长度必须大于等于32字节
* Size大于0,则接收够Size长度的数据执行一次HAL_UART_RxCpltCallback(huart);
* Sized等于0,则接收不定长的数据就执行一次HAL_UART_RxCpltCallback(huart);
* 两种情况下,数据都存放在huart->pRxBuffPtr或者pData中,数据长度存放在huart->RxXferCount中
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//串口中断服务函数,用来响应各种串口中断。
//函数实体里面有两个功能,一是清除中断标记位,二是调用相应的回调函数,
//如UART_Receive_IT、UART_Transmit_IT、UART_EndTransmit_IT
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
//串口发送中断回调函数,被UART_EndTransmit_IT调用
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
//串口接收中断回调函数,被UART_Receive_IT调用
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
参数
结构体和枚举类型
看到STM32绷不住了
typedef struct
{
uint32_t BaudRate; /*!< This member configures the UART communication baud rate.
The baud rate is computed using the following formula:
- IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
This parameter can be a value of @ref UART_Word_Length */
uint32_t StopBits; /*!< Specifies the number of stop bits transmitted.
This parameter can be a value of @ref UART_Stop_Bits */
uint32_t Parity; /*!< Specifies the parity mode.
This parameter can be a value of @ref UART_Parity
@note When parity is enabled, the computed parity is inserted
at the MSB position of the transmitted data (9th bit when
the word length is set to 9 data bits; 8th bit when the
word length is set to 8 data bits). */
uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
This parameter can be a value of @ref UART_Mode */
uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled.
This parameter can be a value of @ref UART_Hardware_Flow_Control */
uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).
This parameter can be a value of @ref UART_Over_Sampling. This feature is only available
on STM32F100xx family, so OverSampling parameter should always be set to 16. */
} UART_InitTypeDef;
typedef enum
{
HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized
Value is allowed for gState and RxState */
HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use
Value is allowed for gState and RxState */
HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing
Value is allowed for gState only */
HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing
Value is allowed for gState only */
HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing
Value is allowed for RxState only */
HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing
Not to be used for neither gState nor RxState.
Value is result of combination (Or) between gState and RxState values */
HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state
Value is allowed for gState only */
HAL_UART_STATE_ERROR = 0xE0U /*!< Error
Value is allowed for gState only */
} HAL_UART_StateTypeDef;
typedef struct __UART_HandleTypeDef
{
USART_TypeDef *Instance; /*!< UART registers base address */
UART_InitTypeDef Init; /*!< UART communication parameters */
uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
uint16_t TxXferSize; /*!< UART Tx Transfer size */
__IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
uint16_t RxXferSize; /*!< UART Rx Transfer size */
__IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
HAL_LockTypeDef Lock; /*!< Locking object */
__IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management
and also related to Tx operations.
This parameter can be a value of @ref HAL_UART_StateTypeDef */
__IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations.
This parameter can be a value of @ref HAL_UART_StateTypeDef */
__IO uint32_t ErrorCode; /*!< UART Error code */
}UART_HandleTypeDef;
typedef enum
{
UART_FIFO_TX_NOT_FULL,
UART_FIFO_TX_EMPTY,
UART_FIFO_RX_NOT_EMPTY,
} HAL_UART_WaitFlagDef;
宏参数
#define UART0 ((USART_TypeDef *)UART0_BASE)
#define UART1 ((USART_TypeDef *)UART1_BASE)
#define UART2 ((USART_TypeDef *)UART2_BASE)
#define UART3 ((USART_TypeDef *)UART3_BASE)
#define UART4 ((USART_TypeDef *)UART4_BASE)
#define UART5 ((USART_TypeDef *)UART5_BASE)
#define UART_FIFO_FULL 32
#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */
#define HAL_UART_ERROR_FE 0x00000040U /*!< Frame error */
#define HAL_UART_ERROR_PE 0x00000080U /*!< Parity error */
#define HAL_UART_ERROR_ORE 0x00000100U /*!< Overrun error */
#define UART_WORDLENGTH_5B ((uint32_t)UART_LC_DATAL_5BIT)
#define UART_WORDLENGTH_6B ((uint32_t)UART_LC_DATAL_6BIT)
#define UART_WORDLENGTH_7B ((uint32_t)UART_LC_DATAL_7BIT)
#define UART_WORDLENGTH_8B ((uint32_t)UART_LC_DATAL_8BIT)
#define UART_STOPBITS_1 0x00000000
上一篇:【联盛德W806上手笔记】七、I2C
下一篇:【联盛德W806上手笔记】五、TIM定时器
推荐阅读最新更新时间:2024-11-17 05:53
设计资源 培训 开发板 精华推荐
- 【单片机】基于STC32G12K128的最小系统板
- 具有基本抑制功能的 LF25CPT-TR 2.5V 低压降稳压器的典型应用
- SC4212 极低输入/极低压差 1Amp 稳压器的典型应用
- 使用 Analog Devices 的 ADP1720-33 的参考设计
- AD587JRZ-REEL 作为 CMOS 双路 DAC 的 10V 基准的典型应用电路
- HV9150 线性稳压器 (LDO) 模式、高电压输出的典型应用
- EEZ PSU consolidated r5B13a
- 家庭影视蓝牙移动功放
- FRDM33772CSPEVB: 具有SPI通信功能的MC33772C评估板
- 使用 NCV7430 的衰落功能
- 睿瀚医疗万斌:“脑机接口+AI+机器人”是康复赛道的未来
- 希润医疗孟铭强:手功能软体机器人,让脑卒中患者重获新生
- 柔灵科技陈涵:将小型、柔性的脑机接口睡眠设备,做到千家万户
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度