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

STM8S105,串口接收中断无法进入,麻烦大家帮我看是什么原因

[复制链接]
lucky67 提问时间:2017-1-20 13:39 /
发送正常,但接收时无法进入中断,请问是什么原因呢?代码如下:
main.c:
  1. #include "uart2.h"

  2. void main(void){
  3.     clock_Config();//时钟设置
  4.     uart2_Config();//串口2初始化配置
  5.     enableInterrupts();//允许中断
  6.     while(1){
  7.     Delayms(1000);
  8.     UART_Send("send OK\n", 8);
  9.     }
  10. }


  11. //串口接收中断
  12. #pragma vector=0x17
  13. __interrupt void UART2_RX_IRQHandler(void){
  14.   Delayms(1000);
  15.     if (UART2_GetFlagStatus(UART2_FLAG_RXNE) != RESET){//接受数据寄存器非空
  16.       Delayms(1000);
  17.         UART_send_byte(UART2_ReceiveData8());//将接收到的数据发回去
  18.     }
  19. }
复制代码
uart2.c:
  1. #include "uart2.h"

  2. /*时钟配置*/
  3. void clock_Config(void){
  4.     //==启用外部晶振函数==
  5.      CLK_DeInit();                                      //时钟各变量初始化
  6.      CLK_HSECmd(ENABLE);                                //外部高速晶振使能
  7.      while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //测试外部高速晶振位是不是使能
  8.      CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);           //外部时钟预分频器,1分频
  9.      CLK_ClockSwitchCmd(ENABLE);                        //使能时钟切换功能
  10.      CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);//时钟切换 ( 自动切换模式 , 切换到外部高速晶振 , 禁止切换中断 ,内部时钟禁止 )
  11. }

  12. /*串口2初始化配置*/
  13. void uart2_Config(void){
  14.     UART2_DeInit();
  15.     UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);//波特率,字节数,1个停止位,无奇偶效验位,非同步模式,允许接受和发送
  16.     UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);//开接收中断
  17.     UART2_Cmd(ENABLE );
  18. }

  19. /*发送1字节数据*/
  20. void UART_send_byte(uint8_t byte){
  21.     UART2_SendData8((unsigned char)byte);
  22.     while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);//发送数据为空
  23. }               

  24. /*发送长度为“uint16_t Length”的数据*/
  25. void UART_Send(uint8_t *Buffer, uint16_t Length){
  26.     uint16_t l=0;
  27.     for(;l<Length;l++)
  28.     UART_send_byte(Buffer[l]);
  29. }
复制代码
uart2.h
  1. #ifndef __UART2_H
  2. #define __UART2_H

  3. #include "stm8s.h"
  4. #include "stm8s_clk.h"
  5. #include <stdio.h>

  6. void clock_Config(void);//时钟设置
  7. void uart2_Config(void);//串口2初始化配置
  8. void UART_send_byte(uint8_t byte);//发送1字节数据
  9. void UART_Send(uint8_t *Buffer, uint16_t Length);//发送长度为“uint16_t Length”的数据

  10. void Delayus(void);
  11. void Delayms(unsigned int time);

  12. #endif
复制代码


收藏 1 评论1 发布时间:2017-1-20 13:39

举报

1个回答
lucky67 回答时间:2017-1-20 20:49:24
惭愧惭愧,我把串口线接错了。。。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

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