|
通过串口发送STM32
接收指令控制LED的开关
一、STM32CUBEMX基础配置
此处不讲,忘了的看http://eli-home.top/discuz/forum.php?mod=viewthread&tid=393&extra=page%3D1
二、STM32串口配置
点击Connectivity,选择USART1,选择Asynchronous,异步通信模式
点击Parameter Settings更改波特率,数据位,校验位,停止位等内容
这里我选择波特率115200,数据位8位,校验位0,停止位1
发送配置完成
接收我们采用中断接收
因此,要打开中断,设置中断优先级
点击NVIC Settings打开中断
点击左侧的System Core
点击NVIC
找到UART1的优先级配置将其配置为1
当两个中断同时发生时,优先处理中断中断优先级高的中断
接收配置完成
三、编写代码
在主函数内定义所要发送的内容
- uint8_t Str[] = {"STM32F103ZET6"};
复制代码
调用发送函数
- HAL_UART_Transmit(&huart1,Str,sizeof(Str),10000);
复制代码 编译下载,打开串口助手观察是否可以发送
接收部分
先定义一全局变量为接收缓冲区
由于我们采用中断接收,因此要编写中断服务函数
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(huart->Instance == USART1 )
- {
- switch(Rx)
- {
- case '1': HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,0);break;
- case '2': HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,1);break;
- }
- HAL_UART_Receive_IT (&huart1 ,&Rx ,1);
- }
- }
复制代码 这里的if(){}是判断所产生的UART中断信号是由哪一个UART产生。huart->Instance == USART1 这句语句说明有USART1产生。
switch(Rx)
{
case '1': HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,0);break;
case '2': HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,1);break;
}
这是判断接收到的指令的值,并执行
HAL_UART_Receive_IT (&huart1 ,&Rx ,1);
这条语句是允许UART1接收中断,并将其接收的值存到Rx中,1的字节。在每一次进入到接收中断后都要重新打开否则无法连续接收。
主函数初始化完成后也要允许UART1接收中断。
- HAL_UART_Receive_IT(&huart1,&Rx,1);
复制代码 发送,接收代码编写完成,编译烧录验证
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|