在线时间0 小时
UID110578
ST金币0
蝴蝶豆0
注册时间2009-2-19
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
STM8通讯的问题
我想用STM8做有通讯协议的通讯程序,,我是用接收数据满进行中断接收,然后将接收到的数据回发,
现在根据下面的程序,发送没有问题,发送程序我没有贴出来,
但就是接收不行,我在看变量与寄存器时,发现发送的第一个数据到了数据寄存器内,就是没有进入到中断程序
因为STM8初学,所以不知道是中断出问题,还是中断内的程序出问题,请高手指点一下,在下将万分感谢
这段是设置文件
void main(void)
{
unsigned int i,n;
unsigned char counter;
/*High speed internal clock prescaler: 1*/
CLK_CKDIVR = 0x00;
LINUART_CR2 = 0x00; //disable Tx & Rx
/* LINUART configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Receive and transmit enabled
- LINUART Clock disabled
*/
/* Configure UART1 */
LINUART_CR1 = 0x00;
LINUART_CR3 = 0x00;
LINUART_BRR2 = 0x0B;
LINUART_BRR1 = 0x08;
ITC_SPR6 = 0XF3;
LINUART_CR2 = 0x2C; //允许接收与发送
//LINUART_SR = 0X00;
下面是中断文件中的中断程序
/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
* Copyright (c) 2007 STMicroelectronics
*/
#include "stm8s207r.h" /* Registers and memory mapping file. */
#include "stdio.h"
extern char Uart_Rx_Data[22];
extern unsigned char Uart_Count;
extern unsigned char RxBuffer;
#define Start_Command0 0xAA
#define Start_Command1 0x55
//数据区
#define Over_Command0 0xFF
#define Over_Command1 0xFF
typedef void @far (*interrupt_handler_t)(void);
struct interrupt_vector {
unsigned char interrupt_instruction;
interrupt_handler_t interrupt_handler;
};
@far @interrupt void NonHandledInterrupt (void)
{
/* in order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction
*/
return;
}
@far @interrupt void LINUART_RX_IRQHandler (void)
{
char U;
U=0X11; //是用来看是否进入中断的变量
while (!(LINUART_SR & 0x20)) //是接收中断
{
//LINUART_SR = 0; //清接收标志位
RxBuffer=LINUART_DR ; //读出数据,并清接收 标志位
}
if(Uart_Count==0) //根据通信协议字头第易 字节 0xAA
{
// RxBuffer=Start_Command0;
if(RxBuffer!=Start_Command0)
{
Uart_Count = 0;
return;
}
else
{ Uart_Rx_Data[Uart_Count] = RxBuffer;
Uart_Count++;
}
}
if(Uart_Count==1) //根据通信协议字头第二字节为0X55
{
//RxBuffer=Start_Command1;
if(RxBuffer!=Start_Command1)
{
Uart_Count = 0;
return;
}
else
{ Uart_Rx_Data[Uart_Count] = RxBuffer;
Uart_Count++;
}
}
RxBuffer=03;
Uart_Rx_Data[Uart_Count] = RxBuffer;
Uart_Count++;
if (Uart_Count==20)
{
// RxBuffer=Over_Command0;
if(RxBuffer!=Over_Command0)
{ Uart_Count = 0;
return;
}
else
{ Uart_Rx_Data[Uart_Count] = RxBuffer;
// Uart_Count++;
}
}
if (Uart_Count==21)
{
// RxBuffer=Over_Command1;
if(RxBuffer!=Over_Command1)
{ Uart_Count = 0;
return;
}
else
{Uart_Rx_Data[Uart_Count] = RxBuffer;
Uart_Count = 0;}
}
return;
}
extern void _stext(); /* startup routine */
struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap */
{0x82, NonHandledInterrupt}, /* irq0 */
{0x82, NonHandledInterrupt}, /* irq1 */
{0x82, NonHandledInterrupt}, /* irq2 */
{0x82, NonHandledInterrupt}, /* irq3 */
{0x82, NonHandledInterrupt}, /* irq4 */
{0x82, NonHandledInterrupt}, /* irq5 */
{0x82, NonHandledInterrupt}, /* irq6 */
{0x82, NonHandledInterrupt}, /* irq7 */
{0x82, NonHandledInterrupt}, /* irq8 */
{0x82, NonHandledInterrupt}, /* irq9 */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, LINUART_RX_IRQHandler}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};
|
|