打印
[STM32F4]

用CCR1为什么做不了?

[复制链接]
2131|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Edisons|  楼主 | 2021-8-7 21:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, TI, tc, AC, dc, ST
我用TA0的0通道实现了模拟串口的收发功能,但是同样的套路,用CCR1为什么做不了?
static uchar   bitcnt=0;
static uint   uart_buf;

static uchar  RXData0;  //用来存储接收的8位数据
static uchar   RXBitCnt0;//接收数据位数
uchar  rx_sign=0;

volatile int Send_flag=0;

void FaultRoutine(void)
{
   while(1);// 异常挂起
}
void ConfigClocks()
{
   uint i;
  for(i = 0; i < 0xFFFF; i++){};
  _BIS_SR(OSCOFF);
  if(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0xff)
  {
    while(1);
  }
  BCSCTL1 = CALBC1_1MHZ;// Set range
  DCOCTL = CALDCO_1MHZ;  // Set DCO step + modulation
  BCSCTL2 |=SELM_0+DIVS_0+DIVM_0;;              // MCLK = DCO = SMCLK=1MHZ         
}
void ConfigPins()
{
  P1DIR |= TXD+LED+BIT6;
  P1SEL |=RXD;
  P1DIR &= ~RXD;                                        // P1.2 input, other outputs
  
  P1OUT |= TXD;                                                      // clear output pins
  P1OUT &=~LED;
}

//----------发送一个字节------------------------------------------//
void send_char(uchar tchar)
{
  TACTL = TACLR + TASSEL_2; //清零计数器 选择SMCLK时钟
  CCR0 = BITTIME_1b;   //crr0定时间隔为1bit时间宽度
  CCTL0 |= CCIE;      //打开CCR0中断
  bitcnt = 10;     //待发送的位数,1位开始位,8位数据位,1位停止位
  uart_buf = 0x0100;   //stop bit 停止位
  uart_buf |= tchar;  //data bit 数据位
  uart_buf <<=1;//start bit.开始位
  Send_flag = 0;
  TACTL |= MC_1; //Start TA, Timer A mode control: 1 - Up to CCR0
  _BIS_SR(GIE);
  while(!Send_flag); //wait until send complete
  Send_flag = 1;
}
//---------------------------------------------------------------------//

void RXReady(void)
{
// RXBitCnt0=0x08;//初始化接收数据计数器
  TACTL=TASSEL_2+MC_2+TACLR;//SMCLK  连续记数模式  清零计数器
  TACCTL1=CM_2+CAP+SCS+CCIE+CCIS_0;
  //下降沿捕获  同步捕获源  捕获模式  捕获中断使能  捕获输入为CCI1A
  _EINT();
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void) //串口发送程序处理过程,位操作
{
   if(bitcnt>0)
  {
    if(uart_buf & 0x01)
      POUT |= TXD;//发送数据1
    else
      POUT &= ~TXD;//发送数据0
    uart_buf >>= 1;
    bitcnt--;
  }
   else
  {
    POUT|=TXD;//默认状态置高
    TACTL &= ~MC_3; //Close the TA when a Byte send over. 00 停止模式
    CCTL0 &= ~CCIE; //关闭CCR0中断
    Send_flag = 1;
  }
}
//---------------------------------------------------------------------//

#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void)  //接收串口数据处理过程,利用串口协议的时间间隔来进行。
{
               P1OUT ^= LED;
               TACCR1+=BITTIME_1b;//增加一位定时间隔
              if(TACCTL1&CAP) //判断是否为捕获模式
             {
                  RXBitCnt0=0;
              }
             switch(RXBitCnt0)
             {
                case 0:   //为捕获模式
                          RXData0=0;//清空缓冲区
                          TACCR1+=BITTIME_1b5;
                          TACCTL1&=~CAP;//改为比较模式
                          RXBitCnt0++;
                          break;   
                case 9:  //比较模式改为捕获模式
                          TACCTL1|=CAP;
                          rx_sign=1; //作为接收完毕的信号
                          break;
                default://1~8 有效数据位
                      RXData0=RXData0>>1;//右移一位,等待下一个数据进来
                      if(TACCTL1&SCCI)RXData0|=0x80;//输入为1
                      RXBitCnt0++;
                      break;
               }
}

使用特权

评论回复
沙发
Mozarts| | 2021-8-7 21:59 | 只看该作者
波特率要设置低点稳定些吧。。

使用特权

评论回复
板凳
Listate| | 2021-8-7 22:00 | 只看该作者
这个代码看不出来是什么原因

使用特权

评论回复
地板
laozhongyi| | 2021-8-7 22:04 | 只看该作者
这个说明低电平信号没有了。

使用特权

评论回复
5
wanglaojii| | 2021-8-7 22:05 | 只看该作者
模拟串口的功能一般没有问题的。

使用特权

评论回复
6
bbapple| | 2021-8-7 22:08 | 只看该作者
如果电平信号都满足要求才可以的

使用特权

评论回复
7
handleMessage| | 2021-8-7 22:09 | 只看该作者
可以参考一下G233x的芯片的定时器模拟串口。

使用特权

评论回复
8
zhouhuanの| | 2021-8-7 22:13 | 只看该作者
主要是采用定时器进行处理信号时序的 ,
模拟串口的设计还是有一定的难度的。

使用特权

评论回复
9
feiqi1| | 2021-8-8 12:36 | 只看该作者
波特率怎么设置的,时序呢?

使用特权

评论回复
10
paotangsan| | 2021-9-7 11:23 | 只看该作者
为什么会没有低电平信号的呢

使用特权

评论回复
11
renzheshengui| | 2021-9-7 11:23 | 只看该作者
寄存器配置应该是 一样的吧

使用特权

评论回复
12
wakayi| | 2021-9-7 11:31 | 只看该作者
这俩有什么不一样的吗

使用特权

评论回复
13
wowu| | 2021-9-7 12:09 | 只看该作者
会不会是引脚复用了啊

使用特权

评论回复
14
xiaoqizi| | 2021-9-7 12:13 | 只看该作者
估计是时序有问题

使用特权

评论回复
15
SantaBunny| | 2023-3-5 22:13 | 只看该作者
波特率要设置需要再低点稳定些的吧

使用特权

评论回复
16
kangzj| | 2023-8-3 23:09 | 只看该作者
波特率要设置低点稳定些吧。。

使用特权

评论回复
17
lium| | 2023-8-3 23:11 | 只看该作者
这个代码看不出来是什么原因

使用特权

评论回复
18
guoyt| | 2023-8-3 23:12 | 只看该作者
这个说明低电平信号没有了。

使用特权

评论回复
19
hanwe| | 2023-8-3 23:14 | 只看该作者
模拟串口的功能一般没有问题的。

使用特权

评论回复
20
yufe| | 2023-8-3 23:17 | 只看该作者
如果电平信号都满足要求才可以的

使用特权

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

本版积分规则

58

主题

1426

帖子

0

粉丝