新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2019-10-7
- 在线时间
- 4 小时
|
1金钱
#include "sys.h"
#include "delay.h"
#include "usart.h"
UART_HandleTypeDef USART1_Handler; //定义句柄
int n=3;
unsigned char RE[1];
unsigned char buff[]="Hello World! 世界你好!";
unsigned char A1[]="yes";
unsigned char A2[]="no";
void USART1_Init( )
{
USART1_Handler.Instance=USART1;
USART1_Handler.Init.BaudRate=115200;//设置波特率
USART1_Handler.Init.WordLength=UART_WORDLENGTH_8B; //设置字长
USART1_Handler.Init.StopBits=UART_STOPBITS_1; //设置停止位 1位
USART1_Handler.Init.HwFlowCtl=UART_PARITY_NONE; //不开启硬件流控制
USART1_Handler.Init.Mode=UART_MODE_TX_RX; //同时开启接收和发送
USART1_Handler.Init.Parity=UART_PARITY_NONE; //不使用奇偶校验位
HAL_UART_Init(&USART1_Handler);
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart) //回调函数
{
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART1)
{
__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
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级3,子优先级3 可写0-3
}
}
void USART1_IRQHandler(void) //中断服务函数
{
/* 每接收到一个数据都进入一次中断,并进入中断服务函数 */
HAL_UART_IRQHandler(&USART1_Handler); //调用HAL库中断处理公用函数
HAL_UART_Receive_IT(&USART1_Handler,RE, sizeof(RE)); //开启接收中断
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)/* 接收回调函数,一组数据全部接收完了才进来一次 */
{
unsigned char m;
if(huart->Instance==USART1) //判断是不是串口1
{
m=RE[0]; //数组的后一个数据赋值给变量m
switch(m)
{
case 0x01:HAL_UART_Transmit(&USART1_Handler,A1,sizeof(A1),1000);break;
case 0x02:HAL_UART_Transmit(&USART1_Handler,A2,sizeof(A2),1000);break;
default:HAL_UART_Transmit(&USART1_Handler,buff,sizeof(buff),1000);break;
}
}
}
int main(void)
{
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(432,25,2,9); //设置时钟,216Mhz
delay_init(216); //延时函数初始化
USART1_Init(); //串口初始化
HAL_UART_Receive_IT(&USART1_Handler,RE, sizeof(RE)); //开启接收中断
while(1){}
}
|
-
这是串口助手图,原本应该只发送前面的yes,可default里面的也出来了
|