STM32 串口通信

串口通信初始化

 //配置串口的工作参数
 void usart_initliuxin(uint32_t baudrate){
 
		liuxin.Instance = USART1;
	 liuxin.Init.BaudRate = baudrate;
	 liuxin.Init.WordLength = UART_WORDLENGTH_8B;
	 liuxin.Init.StopBits =  UART_STOPBITS_1;
	 liuxin.Init.Mode = UART_MODE_TX_RX;
	 liuxin.Init.Parity = UART_PARITY_NONE;
	 liuxin.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	 HAL_UART_Init(&liuxin);
	 HAL_UART_Receive_IT(&liuxin,(uint8_t*)g_rx_buffer,2);	
 }

首先是串口初始化

我们先创建函数方法 usart_init();

随后 我们首先调用HAL_UART_INIT()方法  然后发现他需要一个结构体指针

        

那么我们就开始创建 这个结构体

	 liuxin.Instance = USART1;//第一步 初始化是哪一个串口
	  liuxin.Init.BaudRate = baudrate;//设置波特率
//默认
	 liuxin.Init.WordLength = UART_WORDLENGTH_8B;
	 liuxin.Init.StopBits = UART_STOPBITS_1;
	 liuxin.Init.Parity = UART_PARITY_NONE;
	 liuxin.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	 //默认

其实就设置两个参数 一个是 初始化某一个串口  还有就是设置波特率 其他都是默认的

最后调用最关键的代码

HAL_UART_Init(&liuxin);

至此 初始化完成一半

串口的gpio部分初始化

void HAL_UART_MspInit( UART_HandleTypeDef *huart)

首先我们需要在函数体中判断 huart是不是我们的串口1

if(huart->Instance ==USART1)

随后在if体里面开始初始化

我们观看手册

我们需要初始化GPIOA 对应的 9 10 端口

那么首先确认初始GPIO函数

HAL_GPIO_Init(GPIOA,&d);

rx对应的是接受的端口 tx对应发送

所有我们初始化pin9 首先创建初始化GPIO的结构体指针

d.Pin = GPIO_PIN_9;
		d.Speed = GPIO_SPEED_FREQ_HIGH   ;

 最重要的就是确认mode

我们是发送端口 那么肯定就是 输出了 问题是选择哪一个输出呢 首先我们肯定是复用

  • 复用功能:GPIO引脚不仅用于普通的I/O操作,还能复用为外设的功能,比如UART、SPI、I2C等。
  • 推挽输出:能够驱动引脚输出高电平或低电平。

所以我们采用复用推挽输出

输入这很简单呢 普通的复用输入就行了 唯一注意的是 我们采用的是上拉 因为电平默认是高电平

d.Mode = GPIO_MODE_AF_INPUT;
		d.Pin = GPIO_PIN_10;
		d.Pull = GPIO_PULLUP;

最后 我们就要初始化两个很重要的事情

__HAL_RCC_USART1_CLK_ENABLE();
		__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_NVIC_SetPriority(USART1_IRQn,1,1);
		HAL_NVIC_EnableIRQ(USART1_IRQn);

上初始化时钟以及设置中断

随后去找到对应的中断函数

我们拷贝过来并且进行一些操作

void USART1_IRQHandler(){
	HAL_UART_IRQHandler(&liuxin);
	HAL_UART_Receive_IT(&liuxin,(uint8_t*)g_rx_buffer,2);
}

第二个函数是很重要的一步 她负责接受串口中的数据

其次 我们在每次打断后都需要接受他 并且重新设置

最后 重新写这个函数即可 设置

主函数的这个 transmit则是发送数据到串口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值