没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
2页
最近为了配置一个芯片使用到了串口发送9位数据位的情况,在此小记一下。 1. 串口硬件和参数初始化 将数据位宽度配置成:UART_WORDLENGTH_9B ,其他参数和常规配置一样。 UART_HandleTypeDef husart3; void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct; if(huart->Instance==USART3) { __HAL_RCC_GPIOC_CLK_ENABLE();//IO时钟使能 GPIO_InitStruc
资源推荐
资源详情
资源评论
STM32之串口发送宽度为之串口发送宽度为9位的数据位的数据
最近为了配置一个芯片使用到了串口发送9位数据位的情况,在此小记一下。
1. 串口硬件和参数初始化串口硬件和参数初始化
将数据位宽度配置成:UART_WORDLENGTH_9B ,其他参数和常规配置一样。
UART_HandleTypeDef husart3;
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(huart->Instance==USART3)
{
__HAL_RCC_GPIOC_CLK_ENABLE();//IO时钟使能
GPIO_InitStruct.Pin = USARTx_Tx_GPIO_PIN|USARTx_Rx_GPIO_PIN;//PB10和PB11
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = USARTx_AFx;
HAL_GPIO_Init(USARTx_Tx_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.Pin = USARTx_Rx_GPIO_PIN;
HAL_GPIO_Init(USARTx_Rx_GPIO, &GPIO_InitStruct);
}
}
void MX_USART3_Init(void)
{
__HAL_RCC_USART3_CLK_ENABLE();//串口3时钟使能
huart3.Instance = USART3;
huart3.Init.BaudRate = USART3_BAUDRATE;
huart3.Init.WordLength = UART_WORDLENGTH_9B;//数据位宽度改为9位
huart3.Init.StopBits = UART_STOPBITS_1;//一位停止位
huart3.Init.Parity = UART_PARITY_NONE;//无奇偶校验位
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart3);
HAL_UART_Receive_IT(&huart3,Usart3_TempData,1);
HAL_NVIC_SetPriority(USART3_IRQn, 2, 2);
HAL_NVIC_EnableIRQ(USART3_IRQn);
}
2. 串口发送相关库函数的修改串口发送相关库函数的修改
看了下库函数,如果想要收发数据位宽度为9位的数据,貌似只能够通过阻塞模式发送,如下是阻塞模式下串口发送数据的库
函数(省略部分函数,只留取了最关键的代码):
/**
* @brief Sends an amount of data in blocking mode.
* @param huart: pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @param pData: Pointer to data buffer
* @param Size: Amount of data to be sent
* @param Timeout: Timeout duration
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
...省略
if(huart->Init.WordLength == UART_WORDLENGTH_9B)
{
...省略
tmp = (uint16_t*) pData;
huart->Instance->DR = (*tmp & (uint16_t)0x01FF);
...省略
资源评论
- 色空空色2023-07-25文件中的步骤易于理解,只需按照文中提到的配置方法进行设置,就能成功实现串口发送宽度为9位的数据。
- 申增浩2023-07-25这篇文章对于希望了解如何在STM32上发送9位宽度数据的人来说,是一份宝贵的参考资料。
- 艾苛尔2023-07-25作者以简单直接的方式讲解了如何配置及使用STM32进行串口通信,并提供了相应的示例代码,对编程新手很有帮助。
- 坐在地心看宇宙2023-07-25这篇文件详细且清晰地介绍了如何在STM32上实现串口发送宽度为9位的数据,对初学者来说很友好。
- 思想假2023-07-25这篇文件对实现串口发送宽度为9位的数据提供了清晰的指导,对想要在STM32上使用该功能的人非常有用。
weixin_38619467
- 粉丝: 5
- 资源: 957
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功