您的位置:首页 > 房产 > 家装 > 签名设计在线_企业网站最下面的那栏叫啥_seoul怎么读_电商网站seo优化

签名设计在线_企业网站最下面的那栏叫啥_seoul怎么读_电商网站seo优化

2024/10/5 18:32:55 来源:https://blog.csdn.net/weixin_41446932/article/details/142462531  浏览:    关键词:签名设计在线_企业网站最下面的那栏叫啥_seoul怎么读_电商网站seo优化
签名设计在线_企业网站最下面的那栏叫啥_seoul怎么读_电商网站seo优化

什么是串口

串行通信接口:指按位发送和接收的接口,如RS232/422/485

RS232电平和COMS/TTL电平对比

RS232电平:逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
CMOS电平: 逻辑1:3.3V 逻辑0:0V (STM32使用)
TTL电平:逻辑1:5V 逻辑0:0V (51单片机使用)

备注:因为电压不同,所以CMOS/TTL是不能是直接与RS232交换信息,需要电平转换芯片进行电压转换。 如3.3V可以使用MAX323/SP3232转换芯片, 如果是5V可以使用MAX232转换芯片

USART/UART异步通信配置步骤

一、配置串口工作参数、开启串口异步接收中断

使用HAL库接口HAL_UART_Init(); HAL_UART_Receive_IT();

#define RXBUFFERSIZE 1
UART_HandleTypeDef g_uart1_handle;    /* UART句柄 */
uint8_t g_rx_buffer[RXBUFFERSIZE] = {0};         //接收缓冲区
void usart_init(uint32_t baudrate)
{g_uart1_handle.Instance = USART1;g_uart1_handle.Init.BaudRate = baudrate;      								//波特率g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                        //字长为8位数据格式g_uart1_handle.Init.StopBits = UART_STOPBITS_1;                             //一个停止位g_uart1_handle.Init.Parity = UART_PARITY_NONE;                              //无奇偶校验位g_uart1_handle.Init.Mode = UART_MODE_TX_RX;                                 //收发模式g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                        //无硬件流控HAL_UART_Init(&g_uart1_handle);                                             //HAL_UART_Init()会使能UART1/* 该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量 */HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);}

二、串口底层初始化

使用HAL库接口:HAL_UART_MspInit() 配置GPIO/NVIC/CLOCK等

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{GPIO_InitTypeDef gpio_init_struct;if (huart->Instance == USART1){__HAL_RCC_USART1_CLK_ENABLE();                                  //使能USART1的时钟__HAL_RCC_GPIOA_CLK_ENABLE();                                   //使能GPIOA的时钟gpio_init_struct.Pin  = GPIO_PIN_9;                           //PA9  Txgpio_init_struct.Mode = GPIO_MODE_AF_PP;                     //推挽复用输出gpio_init_struct.Pull = GPIO_PULLUP;                          //下拉,因为时钟空闲是低电平gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_TX_GPIO_AF;                //复用为USART1的TXHAL_GPIO_Init(GPIOA, &gpio_init_struct);gpio_init_struct.Pin  = GPIO_PIN_10;                           //PA10  Rxgpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_RX_GPIO_AF;                //复用为USART1的RXHAL_GPIO_Init(GPIOA, &gpio_init_struct);    }
}

三、设置优先级、使能中断

使用HAL接口:HAL_NVIC_SetPriority(); HAL_NVIC_EnableIRQ();

 HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);                     //设置优先级HAL_NVIC_EnableIRQ(USART1_IRQn);                              //使能中断

四、编写中断服务函数

使用接口:USARTx_IRQHandler(); UARTx_IRQHandler();

void USART1_IRQHandler(void)
{HAL_UART_IRQHandler(&g_uart1_handle);HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);}

五、编写回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{g_rx_flag = 1;}

五、串口数据发送(在main函数中)

USART DR(数据发送寄存器) 、HAL_UART_Transmit();

int main()
{HAL_Init();                                 //初始化HAL库sys_stm32_clock_init(360, 25, 2, 8);       //设置时钟,180Hzdelay_init(180);                           //延时初始化usart_init(115200);printf("开始发送数据\r\n");while(1){       if (g_rx_flag == 1){HAL_UART_Transmit(&g_uart1_handle, (uint8_t *)g_rx_buffer, 1, 30);while(__HAL_USART_GET_FLAG(&g_uart1_handle, UART_FLAG_TC) != 1);printf("\r\n");g_rx_flag = 0;}else{delay_ms(30);}       } }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com