1.串口发送流程
1.字长
2.停止位数
3.波特率
前面一章有
4.使能串口
5.DMA(以后说)
6.使能发送器
7.向发送数据寄存器TDR写入数据
8.写入最后一个数据后,等待状态寄存器USARTx_SR(ISR)的TC位置1,转输完成
2.HAL库方法
1.
配置函数中有使能函数
2.
发送数据(这是同步的,去掉USART中的S就是异步)
3.串口发送程序配置过程
4.具体代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
UART_HandleTypeDef huart;
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
GPIO_Initure.Pin=GPIO_PIN_9; //PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9
GPIO_Initure.Pin=GPIO_PIN_10; //PA10
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10
}
}
void uart1_init()
{
huart.Instance = USART1;
huart.Init.WordLength = UART_WORDLENGTH_8B;
huart.Init.StopBits = UART_STOPBITS_1;
huart.Init.BaudRate = 115200;
huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart.Init.Mode = UART_MODE_TX_RX;
huart.Init.Parity = UART_PARITY_NONE;
HAL_UART_Init(&huart);
}
u8 buff[] ="test";
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180);
uart1_init();
while(1)
{
HAL_UART_Transmit(&huart,buff,sizeof(buff),100);
delay_ms(300);
}
}