[STM8] stm8的UART问题

[复制链接]
 楼主| 电子热热热 发表于 2015-11-9 12:03 | 显示全部楼层 |阅读模式
  1. #include "iostm8s105c6.h"
  2. #include "intrinsics.h"
  3. void UART_Init(void)
  4. {
  5.   UART2_CR1=0x00;
  6.   UART2_CR3=0x00;
  7.   UART2_BRR2=0x00;
  8.   UART2_BRR2=0x0d;
  9.   UART2_CR2=0x24;
  10. }
  11. unsigned char c;
  12. void main()
  13. {
  14.    PB_DDR |= 0xFF;
  15.    PB_CR1 |= 0xFF;
  16.    PB_ODR |= 0xFF;              //LED连接的IO口初始化
  17.    PD_DDR = 0x20;                //TXD设置为OD输出
  18.    PD_CR1 = 0x40;                //RXD设置为上拉输入
  19.    PD_CR2 = 0x00;
  20.    UART_Init();
  21.    asm("rim");
  22.    TIM2_PSCR|=0X01;
  23.    TIM2_ARRH=0X03;
  24.    TIM2_ARRL=0XE8;
  25.    TIM2_CNTRH=0X03;
  26.    TIM2_CNTRL=0XE8;
  27.    TIM2_CR1|=0X8C;
  28.    TIM2_IER|=(1<<0);
  29.    TIM2_CR1|=(1<<0);
  30.    while(1)
  31.    {
  32.    while ((UART2_SR & 0x20)==0x00);//Loop until the UART1 Receive Data Register is not empty
  33.         c  = UART2_DR;
  34.    }
  35. }
  36. #pragma vector=UART2_R_RXNE_vector
  37. __interrupt  void UART2_RX(void)
  38. {
  39. c = UART2_DR; // 接收到数据了
  40. while(!UART2_SR_TXE);
  41. }
  42. #pragma vector=15   //TIM2的外部中断向量号是13,加上两个不可屏蔽中断是15
  43. __interrupt void TIM2_IRQ(void)
  44. {
  45.   if(c=='a')
  46.   {
  47.     PB_ODR=0Xfe;
  48.   }
  49.   else
  50.   {
  51.     PB_ODR=0xf1;
  52.   }
  53.   TIM2_SR1&=~(1<<0);
  54. }

  55.   

以上就是程序,要实现的功能是通过手机的串口通讯助手发送数据到蓝牙模块,然后蓝牙模块传到stm8里面,可经过测试,数据传不到stm8里面,各位看官有知道问题的么,我上面的代码是不是有问题?
 楼主| 电子热热热 发表于 2015-11-9 12:11 | 显示全部楼层
在线等
mmuuss586 发表于 2015-11-9 12:20 | 显示全部楼层
中断好像没使能吧;
 楼主| 电子热热热 发表于 2015-11-9 12:29 | 显示全部楼层
UART2_CR2=0x24,这个是接收使能;
TIM2_IER|=(1<<0);这个是定时器中断使能;
应该都有使能。关键是传到蓝牙模块的数据传不到stm8里面
 楼主| 电子热热热 发表于 2015-11-9 12:36 | 显示全部楼层
mmuuss586 发表于 2015-11-9 12:20
中断好像没使能吧;

UART2_CR2=0x24,这个是接收使能;
TIM2_IER|=(1<<0);这个是定时器中断使能;
应该都有使能。关键是传到蓝牙模块的数据传不到stm8里面:'(
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部