打印

STM8S串口调试

[复制链接]
1941|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuchudongdong|  楼主 | 2013-9-3 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void init(void)
{

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//设置时钟为内部时钟16MHz
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOC);//初始化之后是高电平输出
}

void  Uart_Init()
{
  UART1_DeInit();
  UART1_Init((u32)250000,UART1_WORDLENGTH_9D, UART1_STOPBITS_1, \
  UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_RX_ENABLE);

  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //开启接收中断
  UART1_Cmd(ENABLE);
}

void main()
{

  init();
  led();

  GPIO_Init(GPIOD,GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT );


  Uart_Init();
  enableInterrupts();

while(1)
        {
               
   }





沙发
chuchudongdong|  楼主 | 2013-9-3 11:05 | 只看该作者
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  u8 address=1;//设置地址
  u8 n=0;//计数
  static u16 RXB8;
  static u16 UDR;
  
   GPIO_WriteHigh(GPIOA,GPIO_PIN_3);//高电平点亮
   GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  
  UDR=UART1_ReceiveData9();
  RXB8=(UDR&0x0100);
  
  if(UART1_GetITStatus(UART1_IT_RXNE)!=RESET)
   {
   // UART1_ClearITPendingBit(UART1_IT_RXNE);
   
     if(RXB8==0)
     {
       n=0;
       return;
     }

     if((n>=address)&&(n<=address+3))
     {
      uint16_t UART1_ReceiveData9();
      DMX_buf[n-address]=UART1_ReceiveData9();
      n++;
     }
  }

使用特权

评论回复
板凳
chuchudongdong|  楼主 | 2013-9-3 11:07 | 只看该作者
这是我的串口中断接收的程序  调试的后总是进不了中断 我应该怎么办

使用特权

评论回复
地板
feilusia| | 2013-9-3 11:08 | 只看该作者
https://bbs.21ic.com/blog-49073-70407.html
这个人的STM8博文不错,我当时学就是看这些资料,不过是操作寄存器的

使用特权

评论回复
5
chuchudongdong|  楼主 | 2013-9-3 11:37 | 只看该作者
feilusia 发表于 2013-9-3 11:08
https://bbs.21ic.com/blog-49073-70407.html
这个人的STM8博文不错,我当时学就是看这些资料,不过是操作寄 ...

这个我看过了
我第一次做串口调试  用示波器测量RX端口的时候有正负波形  是不是就证明有信号发送过来  
运行程序的时候RXNE一直也没变化  一直都接受不了数据是怎么回事啊

使用特权

评论回复
6
feilusia| | 2013-9-3 11:49 | 只看该作者
chuchudongdong 发表于 2013-9-3 11:37
这个我看过了
我第一次做串口调试  用示波器测量RX端口的时候有正负波形  是不是就证明有信号发送过来   ...

是上位机给机子发数据,然后进不了中断?你的波特率有点高,然后数据长度一般是8位吧.你的电脑设置要跟你程序设置一样的参数。

使用特权

评论回复
7
chuchudongdong|  楼主 | 2013-9-3 12:39 | 只看该作者
feilusia 发表于 2013-9-3 11:49
是上位机给机子发数据,然后进不了中断?你的波特率有点高,然后数据长度一般是8位吧.你的电脑设置要跟你 ...

是有个控制器的板子 发送数据到解码器的板子上 然后解码控制小灯  波特率、数据位是协议要求的不能改
是因为我的电脑的端口的特性不一样 所以没法接收数据吗

使用特权

评论回复
8
feilusia| | 2013-9-3 14:41 | 只看该作者
你的串口时钟似乎没开。

使用特权

评论回复
9
1849097455| | 2013-9-3 14:49 | 只看该作者
mark

使用特权

评论回复
10
chuchudongdong|  楼主 | 2013-9-3 15:30 | 只看该作者
feilusia 发表于 2013-9-3 14:41
你的串口时钟似乎没开。

void CLK_init(void)
{
  CLK_CKDIVR = 0x08;         // 16M内部RC经2分频后系统时钟为8M
}

void UART3_init(void)
{
  UART3_BRR2 = 0x01;         // 设置波特率9600
  UART3_BRR1 = 0x34;         // 8M/9600 = 0x341
  UART3_CR2 = 0x2C;          // 允许接收中断,允许接收,允许发送
}

这个里哪个是开串口的时钟啊

使用特权

评论回复
11
feilusia| | 2013-9-3 15:46 | 只看该作者
我查了下,时钟默认是开的,那就不用开了。
我的STM8L152的串口1中断函数是用
#pragma vector=0x1E

使用特权

评论回复
12
chuchudongdong|  楼主 | 2013-9-3 15:56 | 只看该作者
feilusia 发表于 2013-9-3 15:46
我查了下,时钟默认是开的,那就不用开了。
我的STM8L152的串口1中断函数是用
#pragma vector=0x1E ...

中断函数用的是库文件应该不会错  如果用串口助手软件 应该怎么跟电脑连接啊  

使用特权

评论回复
13
zeluo| | 2013-9-3 19:13 | 只看该作者
好资料   需要花时间   好好看看    谢谢了   楼主   感觉很不错   有意思   顶一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝