你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

采用STM32cubeMX来配置串口接收中断

[复制链接]
bob1kong 发布时间:2016-7-23 18:12
STM32cubeMX推出一久了,而且现在除了F1以外基本上都有了。这段时间乘有点时间,来试试这个工具。' [  E  X. s  A
硬件资源:采用STM32F0的探索套件
0 k! ~7 \2 @! a实验目的:
( A+ ~% G# F( \/ j0 o) g8 v5 A1、完成串口发送8个数据功能,配置串口为接收中断,当串口接收到指定数目的数据时,产生中断,中断函数将接收的数据发送出来2 _( B0 |) a+ T
2、本实验具有按键(PA0)中断功能,当按下按键,串口发送数据。
" e# O" b5 d/ X具体配置:
- v! ~3 C: J. {; F9 k1、选择管脚,PA0用于按键,点击该引脚选择输入。/ Z3 |+ M+ [( D
             PC8,PC9用于LED灯。点击该引脚选择输出。
; f4 E1 z( u7 `. h: T+ B0 t             PA9,PA10用于串口1,串口模式选择Asynchronous。(但选择并配置了串口,这两个引脚自动就变绿了)1 L$ S2 {: X0 d9 t
11.jpg + T4 X9 k0 P' T5 P" Q
7 ?# _7 s/ g. m' H$ e$ Y

  P2 F7 j8 B% K0 E2、串口配置:(这个类似于我们以前编程时的串口初始化部分,包括波特率、数据位、停止位等)4 L# v1 R" v* y5 y
12.jpg
  I* C1 L- v  }+ q这里需要注意的是:波特率最小都是115200,想设置9600,那只能最后在程序中改了。
0 d- F& Z( t  }" x0 J3、串口中断配置:7 G. Z+ i0 v. c
13.jpg 0 j0 o; l5 d1 T7 \0 ]8 \/ B
4、完了以后就可以生成IAR或KEIL程序了,这一步大家都知道了,就不截图说明了。7 P/ G4 R5 D" W( z0 v# v
以下是我的测试程序。! Y4 Y  G" B0 I5 \# k' w
程序说明:
9 a3 w7 }  Y# g0 b! e1、首先定义发送接收数组
4 ~3 H5 a( ~) N, |9 D) G
uint8_t TxData[8]= {0x55,0x65,0x01,0x02,0x03,0x04,0x05,0x06};
uint8_t RxData[8];
2、如果是轮询方式发送数据,采用HAL_UART_Transmit(&huart1, TxData,8,10);  
如果是中断方式接收数据,采用HAL_UART_Receive_IT(&huart1, RxData,8);  
while (1)
  {
           HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
           HAL_Delay(1000);
           //HAL_UART_Transmit(&huart1,TxData,8,10);  /* 通过串口1发送数组TxData的8个数据 */
           HAL_UART_Receive_IT(&huart1, RxData,8);     /* 采用中断方式接收8个数据 */
  }
3、串口接收中断服务程序:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
         HAL_UART_Transmit(&huart1,RxData,8,10);
}
4、按键中断服务程序:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_0)
  {
      HAL_UART_Transmit(&huart1,RxData,8,10);
  }
}
使用总结、疑问及需要注意的地方:
1、串口中断配置只是具有串口全局中断,如何配置接收中断或发送中断,或空闲中断?(这点等待高手帮忙)
2、HAL_UART_Receive_IT(&huart1, RxData,8);   如果放置在while循环中,那么就可以连续进行接收中断,RxData的值就会根据接收的数据发生变化,如果放在while外面,那么只进行一次接收中断。
3、针对第2点,那么如果要一直进行中断配置,就要在主程序的while中调用,如果只是进行一次,那么就在需要的时候调用。
4、由于不能配置中断类型,所以如果把中断服务函数HAL_UART_Transmit(&huart1, RxData,8,10);放在voidUSART1_IRQHandler(void)里面就只能收到第一个数据,其他是0。比如串口调试助手发送0x55,0x65,0x01,0x02,0x03,0x04,0x05,0x06,那么中断中发送出来的数据就是0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00
收藏 评论1 发布时间:2016-7-23 18:12

举报

1个回答
stary666 回答时间:2016-7-24 10:26:47

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版