发送正常,但接收时无法进入中断,请问是什么原因呢?代码如下:
main.c:
- #include "uart2.h"
- void main(void){
- clock_Config();//时钟设置
- uart2_Config();//串口2初始化配置
- enableInterrupts();//允许中断
- while(1){
- Delayms(1000);
- UART_Send("send OK\n", 8);
- }
- }
- //串口接收中断
- #pragma vector=0x17
- __interrupt void UART2_RX_IRQHandler(void){
- Delayms(1000);
- if (UART2_GetFlagStatus(UART2_FLAG_RXNE) != RESET){//接受数据寄存器非空
- Delayms(1000);
- UART_send_byte(UART2_ReceiveData8());//将接收到的数据发回去
- }
- }
复制代码 uart2.c:
- #include "uart2.h"
- /*时钟配置*/
- void clock_Config(void){
- //==启用外部晶振函数==
- CLK_DeInit(); //时钟各变量初始化
- CLK_HSECmd(ENABLE); //外部高速晶振使能
- while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //测试外部高速晶振位是不是使能
- CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //外部时钟预分频器,1分频
- CLK_ClockSwitchCmd(ENABLE); //使能时钟切换功能
- CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);//时钟切换 ( 自动切换模式 , 切换到外部高速晶振 , 禁止切换中断 ,内部时钟禁止 )
- }
- /*串口2初始化配置*/
- void uart2_Config(void){
- UART2_DeInit();
- UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);//波特率,字节数,1个停止位,无奇偶效验位,非同步模式,允许接受和发送
- UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);//开接收中断
- UART2_Cmd(ENABLE );
- }
- /*发送1字节数据*/
- void UART_send_byte(uint8_t byte){
- UART2_SendData8((unsigned char)byte);
- while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);//发送数据为空
- }
- /*发送长度为“uint16_t Length”的数据*/
- void UART_Send(uint8_t *Buffer, uint16_t Length){
- uint16_t l=0;
- for(;l<Length;l++)
- UART_send_byte(Buffer[l]);
- }
复制代码 uart2.h
- #ifndef __UART2_H
- #define __UART2_H
- #include "stm8s.h"
- #include "stm8s_clk.h"
- #include <stdio.h>
- void clock_Config(void);//时钟设置
- void uart2_Config(void);//串口2初始化配置
- void UART_send_byte(uint8_t byte);//发送1字节数据
- void UART_Send(uint8_t *Buffer, uint16_t Length);//发送长度为“uint16_t Length”的数据
- void Delayus(void);
- void Delayms(unsigned int time);
- #endif
复制代码
|
评分
查看全部评分