这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » feiante 的ST L035进程贴(串口)

共6条 1/1 1 跳转至

feiante 的ST L035进程贴(串口)

专家
2015-12-04 15:43:45     打赏

今天开始试验下串口,试验完成的功能:按下user按键,通过串口发送8个数据,当接收到串口助手发来的数据,并且第8位是0x08时,点亮led灯,如果第8位是0x09时,熄灭led灯。

试验步骤:

第一步:将上一篇的按键中断工程另保存为usart工程,用stm32cube MX配置端口,首先选择PA9为USART1_TX,PA10为USART1_RX。此时PA9和PA10是黄色的,这是因为还没有选择USART1工作模式。

第二步:选择USART模式:

如下图,选择USART1的Mode为异步方式,没有使用硬件流控制。

第三步:配置USART1相关参数,选择波特率为115200,8位数据位长度,无奇偶校验,1个停止位。

第四步:配置NVIC,考虑到使用串口接收中断,所以配置NVIC,使能串口中断。

第五步:开始编写程序

1、在main.c的while循环中加入接收中断程序

HAL_UART_Receive_IT(&huart1, RxData,8); /* 采用中断方式接收8个数据 *//

2、编写按键中断回调函数,当按下按键时,发送8个数据

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_13)
  {
      HAL_UART_Transmit(&huart1, TxData,8,10);
  }
}
3、编写串口接收中断回调函数,当接收的数据的第8位为0x08,点亮led灯,当接收的数据第8位为0x09,熄灭led灯

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
    if (RxData[7] == 0x08)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
    }
    if (RxData[7] == 0x09)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    }
}



菜鸟
2015-12-07 11:34:32     打赏
2楼
我用USART2,直接用板子上下载程序的USB接口通信成功啦, 按你说的用USART1是不是要自己接个串口线啊?

专家
2015-12-08 11:02:59     打赏
3楼
是的,接PA9和PA10

菜鸟
2015-12-10 14:57:25     打赏
4楼

在main.c的while循环中加入接收中断程序,HAL_UART_Receive_IT(&huart1, RxData,8); /* 采用中断方式接收8个数据 *//

我这样做了,但是只能接收到一次,接着就没反应了。中断处理函数也是这样写的。你知道原因么?

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
    if (RxData[7] == 0x08)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
    }
    if (RxData[7] == 0x09)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    }


院士
2015-12-10 21:06:30     打赏
5楼

串口实验还要继续啊!这个代码架构还不能应用于自己的项目里。

另 第一行第6个图标就是“插入代码”功能,这样分享的代码就非常舒服了。


助工
2015-12-29 13:28:23     打赏
6楼
我又来了

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]