OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6584|回复: 2

旧事重提:STM8L串口收发问题

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2016-9-3 10:20:43 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 紫气东升 于 2016-9-9 14:03 编辑

大神们给点力啊,串口收发始终没能成功,我的程序到底是哪里出问题?

#include <stm8l052c6.h>
#include <stdio.h>

/*********函数声明********/
void delay(unsigned int time);

/******USART初始化*********/
void USART1_Init(void)
{
   
    USART1_CR1=0x00;         //Set the M length, 8 data bits
    //USART1_CR2=0x2c;      //Enable to send and receive
    USART1_CR2=0x08;        //Transmit enable (USART1_CR2_TEN=0x08;)
    USART1_CR2=0x04;       //Receive enable(USART1_CR2_REN=0x04;)
    USART1_CR2=0x80;       //Send interrupt enable(USART1_CR2_TIEN=0x80;)
    USART1_CR2=0x20;      //Receive interrupt enable(USART1_CR2_RIEN=0x20;)
    USART1_CR3=0x00;      //1 stop bits
    USART1_BRR2=0x02;    //Set the baud rate to 9600
    USART1_BRR1=0x68;
}

void Uart_SendData(unsigned char  data)
{
  while(!(USART1_SR&0X80));     //To determine whether the sending data register is empty
  USART1_DR = data;             //Write data to the sending register
}

/*********IO初始化*********/
void IO_Init(void)
{
   PD_ODR=0x03;         //The initial light Quanmie
   PD_DDR=0x03;         //Set PD port for output mode
   PD_CR1=0x03;         //Set the PD port for push-pull output
   PD_CR2=0x00;         //Set PD port to low speed output
}

/*********主函数********/
int main(void)
{
   CLK_PCKENR1 =0x0f;                             
   CLK_CKDIVR=0x00;
   USART1_Init();          //Universal serial interface USART1 initialization
   IO_Init();                 //IO port initialization
     _asm("rim");          //Open total interrupt
   while(1)
   {
     PD_ODR=0x02;         //PD1 (red) light
     delay(65535);           //Delay
     PD_ODR=0x00;         //PD1 (red) out
     delay(65535);          //Delay
    }
}

/******中断服务程序********/
#pragma vector = USART_R_RXNE_vector
@far @interrupt void USART1_Rx_IRQHandler(void)
{
    unsigned char ch1;
        if(USART1_SR ==0x20)       //Whether or not to complete
            {
                ch1 = USART1_DR;
                Uart_SendData(ch1);
            }
     
}

/********延时函数**********/
void delay(unsigned int time)
{
   while(time--);
}

/****中断函数修改******/
/*    BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
*    Copyright (c) 2007 STMicroelectronics
*/

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;
}

extern void _stext();     /* startup routine */
@far @interrupt void USART1_Rx_IRQHandler(void);
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, NonHandledInterrupt}, /* irq21 */
    {0x82, NonHandledInterrupt}, /* irq22 */
    {0x82, NonHandledInterrupt}, /* irq23 */
    {0x82, NonHandledInterrupt}, /* irq24 */
    {0x82, NonHandledInterrupt}, /* irq25 */
    {0x82, NonHandledInterrupt}, /* irq26 */
    {0x82, NonHandledInterrupt}, /* irq27 */
    {0x82, USART1_Rx_IRQHandler}, /* irq28 */
    {0x82, NonHandledInterrupt}, /* irq29 */
};


最底下那个Rx完全没反应,Tx也不知道是不是真的发送了

最底下那个Rx完全没反应,Tx也不知道是不是真的发送了
捕获1.PNG

最佳答案

天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-11-5
在线时间
62 小时
发表于 2016-9-3 10:20:44 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-9-3 20:49:55 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表