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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版