打印
[STM8]

STM8S103红外载波

[复制链接]
2843|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doudoumaomao|  楼主 | 2014-7-6 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请各位大侠帮帮忙,现在用stm8s103f3p6做红外,用的TIM2-CH2 输出PWM 38KHz载波,用UART输出数据,现在接收到的数据不正确,不知道怎么回事,下面是代码。
void pwm38k(void)
{
  CLK->CKDIVR=0x00;  //fCPU = fMASTER
  TIM2->CR1=0x00;    // 关闭定时器
  
  TIM2->CCMR2=0x70;   // 设置TIM2通道2为PMW2模式,计数器小于比较值为有效电平
  
  TIM2->CCER1=0x32; // 高电平有效,捕获在上升沿
  
  TIM2->PSCR=0x01;  //计数器计数频率为16M/2^0=8Mhz,即每0.125us/2计数一次
  
  TIM2->CNTRH=0x00; // 计数初值
  TIM2->CNTRL=0xd1;
  
  TIM2->ARRH=0x00; //
  TIM2->ARRL=0xd1;
  
  TIM2->CCR2H=0;        //比较值,确定占空比
  TIM2->CCR2L=21;   
     
  TIM2->IER=0x00;     //关闭中断
  TIM2->CR1=0x01;    //开启定时器
}

void Uart_Init(void)
{
  UART1_DeInit();
  UART1_Init((u32)1200, UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_EVEN,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);
   UART1_ITConfig(UART1_IT_RXNE, ENABLE);
  UART1_Cmd(ENABLE);
}
int main( void )
{
  
  /* Infinite loop */
  
  /*设置内部时钟16M为主时钟*/

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
  CLK_HSICmd(ENABLE);
  Uart_Init();
pwm38k();
  unsigned char c=0x55;
  while(1)
  {
    while(!(UART1->SR&0X80));   
    UART1_SendData8(c);
//   c++;
    while(!(UART1->SR&0X40));
}
沙发
doudoumaomao|  楼主 | 2014-7-6 11:02 | 只看该作者
请大家帮帮忙啊!!:'(

使用特权

评论回复
板凳
doudoumaomao|  楼主 | 2014-7-7 09:35 | 只看该作者
大家帮帮忙吧!!

使用特权

评论回复
地板
爱在旋涡里| | 2019-4-13 23:35 | 只看该作者
大佬,我初涉STM8,导师这学期交给我了类似的任务,不知道你最后解决问题了吗?我老板让我实现:单片机串口输入5-10个字节数据(10-20个16进制数),单片机把该数据按照9600波特率,8位数据位,无校验,1位停止位做180KHz的载波调制输出(有180KHz载波代表“0”,无载波代表“1”),我实在是不会写代码,能不能分享给我你的代码?感激不尽

使用特权

评论回复
5
爱在旋涡里| | 2019-4-13 23:36 | 只看该作者
大佬,我初涉STM8,导师这学期交给我了类似的任务,不知道你最后解决问题了吗?我老板让我实现:单片机串口输入5-10个字节数据(10-20个16进制数),单片机把该数据按照9600波特率,8位数据位,无校验,1位停止位做180KHz的载波调制输出(有180KHz载波代表“0”,无载波代表“1”),我实在是不会写定时器的代码,能不能分享给我你的代码?感激不尽

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝