新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2020-7-30
- 在线时间
- 10 小时
|
1金钱
#include "sys.h"
#include "delay.h"
#include "usart.h"
UART_HandleTypeDef uart1_handler1; //定义初始化函数成员变量
u8 rdata[1];
void uart1_init()
{
uart1_handler1.Instance=USART1; //定义初始化函数成员变量
uart1_handler1.Init.BaudRate=115200; //定义初始化函数成员变量
uart1_handler1.Init.WordLength=UART_WORDLENGTH_8B; //定义初始化函数成员变量
uart1_handler1.Init.StopBits=UART_STOPBITS_1; //定义初始化函数成员变量
uart1_handler1.Init.Parity=UART_PARITY_NONE; //定义初始化函数成员变量,奇偶校验位选择不开启
uart1_handler1.Init.HwFlowCtl=UART_HWCONTROL_NONE; //定义硬件流控制关闭
uart1_handler1.Init.Mode=UART_MODE_TX_RX; //定义为收发使能
HAL_UART_Init(&uart1_handler1); //使能串口 //此函数内部调用HAL_UART_MspInit()
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIOSER_INIT;
if(huart->Instance==USART1)
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
GPIOSER_INIT.Pin=GPIO_PIN_9; //PA9
GPIOSER_INIT.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIOSER_INIT.Pull=GPIO_PULLUP; //上拉
GPIOSER_INIT.Speed=GPIO_SPEED_HIGH; //高速
GPIOSER_INIT.Alternate=GPIO_AF7_USART1; //复用为USART1
HAL_GPIO_Init(GPIOA,&GPIOSER_INIT);
GPIOSER_INIT.Pin=GPIO_PIN_10;
HAL_GPIO_Init(GPIOA,&GPIOSER_INIT);
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级3,子优先级3
}
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&uart1_handler1); //此函数会调用UART_Receive_IT()函数
HAL_UART_Receive_IT(&uart1_handler1,rdata,sizeof(rdata));
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
u8 rec;
if(huart->Instance==USART1)
{
rec=*((huart->pTxBuffPtr)-1);
HAL_UART_Transmit(&uart1_handler1,&rec,1,1000);
printf("%c\r\n",rec);
}
}
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //初始化系统时钟180mhz
delay_init(180); //初始化延时函数
uart1_init();
HAL_UART_Receive_IT(&uart1_handler1,rdata,sizeof(rdata)); //使能接收中断 buff代表接收数据写入地址
delay_ms(300);
while(1)
{
//HAL_UART_Transmit(&uart1_handler,buff,sizeof(buff),1000);
}
}
|
-
-
|