历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2021年11月25日 | STM8单片机无线315&433脉宽自适应_通用解码程序

2021-11-25 来源:eefocus

单片机源程序如下:


/*

RFINT不能用PA1 要改板 改在PC6

*/

/* Includes ------------------------------------------------------------------*/

#define MAIN_C


#include "ALL.h"


void Delay(u16 nCount)

{

  /* Decrement nCount value */

  while (nCount != 0)

  {

    nCount--;

  }

}



//10ms定时中断初始  在PWM时可更改

void TIME1_CONFIG(void)

{

/* Init TIMER 1 */

CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);

TIM1->IER = 0x00;//??????????? // 禁止中断

TIM1->EGR = 0x01;//??????????? // 允许产生更新事件

TIM1->PSCRH = 0x0;//

TIM1->PSCRL = 0x4;// 2@2MHZ  4@4MHZ

TIM1->ARRH = 0x27; // 设定重装载时的寄存器的高8位 2710=10ms  

TIM1->ARRL = 0x10;

//TIM2->CNTRH = 0xEA; // 设定计数器的初值

//TIM2->CNTRL = 0x60; // 定时周期=1*60000=60000uS=60ms

TIM1->CR1 = 0x01;// b0 = 1,允许计数器工作 ?// b1 = 0,允许更新 设置控制器,启动定时器

TIM1->IER = 0x01;// 允许更新中断

}


//5ms定时中断初始  CPU主频2Mhz

void TIME2_CONFIG(void)

{

/* Init TIMER 4 */

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);

TIM2->IER = 0x00;//??????????? // 禁止中断

TIM2->EGR = 0x01;//??????????? // 允许产生更新事件

#ifdef FREQ_2M

TIM2->PSCR = TIM2_PRESCALER_2;// 2@2M  4@4M 取决于CPU频率

#else

TIM2->PSCR = TIM2_PRESCALER_4;// 2@2M  4@4M 取决于CPU频率

#endif

#if 0//def GUDINGMA//临时为固定码增加用

TIM2->PSCR = TIM2->PSCR/2;// 让定时器速度再快一倍出来

#endif



TIM2->ARRH = 0xc3; // 设定重装载时的寄存器的高8位  c350=50ms

TIM2->ARRL = 0x50; //本参数配合无线

//TIM2->CNTRH = 0xEA; // 设定计数器的初值

//TIM2->CNTRL = 0x60; // 定时周期=1*60000=60000uS=60ms

TIM2->CR1 = 0x01;// b0 = 1,允许计数器工作 ?// b1 = 0,允许更新 设置控制器,启动定时器

TIM2->IER = 0x01;// 允许更新中断

}


//5ms定时中断设置  CPU主频2Mhz

void TIM4_Config(void)

{

/* Init TIMER 4 */

  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);

/* Init TIMER 4 prescaler: / (2^6) = 64/ */

#ifdef FREQ_2M

  TIM4->PSCR = TIM4_PRESCALER_64;//// 4M=128  2M=64

#else

  TIM4->PSCR = TIM4_PRESCALER_128;//// 4M=128  2M=64

#endif

/* HSI div by 1 --> Auto-Reload value: 16M/16 /64  = 1/64M, (1/64M) / 100 = 156.25*/

  TIM4->ARR = 156;

/* Counter value: 2, to compensate the initialization of TIMER*/

  //TIM4->CNTR = 2;

/* clear update flag */

  TIM4->SR1 &= ~TIM4_SR1_UIF;

/* Enable Counter */

  TIM4->CR1 = TIM4_CR1_CEN;

  TIM4->IER=1;

}





#define CFG_GCR_SWD ((u8)0x01) /*!< Swim disable bit mask */



void INITIAL_ALL_PIN(void)

{

//CFG->GCR |= CFG_GCR_SWD;/*disable SWIM interface*/

/*

GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//关SET LED灯

GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//关SET LED灯

GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//关SET LED灯

GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//关SET LED灯

*/


//GPIO_Init(GPIOA,GPIOA_OUT_L,GPIO_MODE_OUT_PP_HIGH_SLOW);//关SET LED灯

GPIO_Init(GPIOB,GPIOB_OUT_H,GPIO_MODE_OUT_OD_HIZ_SLOW); //关ALARM LED灯

GPIO_Init(GPIOC,GPIOC_OUT_L,GPIO_MODE_OUT_PP_LOW_SLOW);//PWM

GPIO_Init(GPIOC,GPIOC_IN_PU,GPIO_MODE_IN_PU_NO_IT);//按键中断


GPIO_Init(GPIOD,GPIOD_OUT_H,GPIO_MODE_OUT_PP_HIGH_FAST);//串口发送

GPIO_Init(GPIOD,GPIOD_IN_PU,GPIO_MODE_IN_PU_NO_IT);//i2c



EXTI->CR1 =(EXTI_SENSITIVITY_RISE_FALL<<4);

GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_FL_IT);//无线接收


}




void UART_CONFIG(void )

{

UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

UART1_ITConfig(UART1_IT_TC, DISABLE);

UART1_Cmd(ENABLE);


}



void PUT_CHAR(uchar Data)

{

int i=10000;


UART1->SR&=~UART1_FLAG_TC;//COM_USART[COM1]->SR&~USART_FLAG_TC;

UART1->DR = Data;

while((UART1->SR & UART1_FLAG_TC) == 0x00)

        {if(--i==0)break;

        }// 若发送寄存器不空,则等待        

}


const char hex[] = "0123456789ABCDEF";

//********************************************************

PRINT_DEC_OR_HEX(uchar format,uchar d)

{

uchar i;

switch(format)

        {case 'd':

                i=d/100;

                if(i!=0)PUT_CHAR(hex[i]);

                i=(d%100)/10;

                if(d>=100||i!=0)PUT_CHAR(hex[i]);

                PUT_CHAR(hex[d%10]);

                break;

        case 'D':                                

                PUT_CHAR(hex[d/10]);

                PUT_CHAR(hex[d%10]);

                break;               

        case 'x':

                PUT_CHAR(hex[d>>4]);

                PUT_CHAR(hex[d&0x0f]);

                break;

        }

}



//********************************************************

void PRINTF (uchar *pstring,uchar *arg)

{

uchar str;

char count=0;

uchar i;

uint t;

//PUT_CHAR ('r');

//PUT_CHAR ('n');

while(1)     /* until full pstring string read */

        {

        str = *pstring++;       /* until '%' or '' */

        if(str=='%')

                {str = *pstring++;

                if(str=='i')        

                                {t=(arg[count]<<8)+arg[count+1];

                                if(t>=10000)

                                        {str=t/10000;PRINT_DEC_OR_HEX('d',str);}

                                if(t>=1000)

                                        {str=t%10000/1000;PRINT_DEC_OR_HEX('d',str);}

                                if(t>=100)

                                        {str=t%1000/100;PRINT_DEC_OR_HEX('d',str);}

                                if(t>=10)

                                        {str=t%100/10;PRINT_DEC_OR_HEX('d',str);}

                                        {str=t%10;    PRINT_DEC_OR_HEX('d',str);}

                                count++;        

                                }

                else

                                PRINT_DEC_OR_HEX(str,arg[count++]);

                }

        #if 0

        else if(str=='

)//打印数组        

                {

                str = *pstring++;

                count=0;

                while(1)

                        {

                        if(str=='x')        

                                {i=arg[count]>>4;                                

                                if(i==0x0b)PUT_CHAR('G');

                                else if(i==0x0A)PUT_CHAR('+');

                                else if(i>9)break;                        

                                else PUT_CHAR(hex[i]);                                

                                

                                i=arg[count]&0x0f;

                                if(i==0x0b)PUT_CHAR('G');

                                else if(i==0x0A)PUT_CHAR('+');                                

推荐阅读

史海拾趣

ELANTEC (Renesas )公司的发展小趣事

作为一家半导体公司,技术突破和创新是ELANTEC发展的核心动力。在移动通信领域,ELANTEC不断推出具有创新性的产品和技术,如低功耗、高性能的移动通信芯片等。此外,在汽车电子、工业控制等领域,ELANTEC也取得了多项技术突破,为客户提供了更加优质的产品和服务。

H&D Wireless公司的发展小趣事

随着全球化进程的加速,高创也开始了其全球化布局的步伐。除了在以色列和中国设立研发中心外,高创还积极拓展国际市场,与全球多个国家和地区的客户建立了长期合作关系。通过参加国际知名展会如汉诺威工业博览会等,高创不仅展示了其最新技术和产品,还加强了与国际同行的交流与合作,进一步提升了其国际知名度和影响力。

Cermetek Microelectronics公司的发展小趣事

随着公司规模的扩大和业务的增长,Cermetek Microelectronics公司开始实施国际化战略。公司积极拓展海外市场,与多个国家和地区的客户建立了合作关系。同时,公司还在海外设立了研发中心和生产基地,以更好地服务全球客户。这种全球布局不仅提升了公司的国际竞争力,也为公司的长远发展奠定了坚实的基础。

Acopian Power Supplies公司的发展小趣事

在电子行业快速发展的背景下,Cermetek Microelectronics公司深知创新的重要性。公司不断加大对研发的投入,引进先进的研发设备和人才,持续推出具有创新性的微电子产品。这些新产品不仅具有更高的性能和更低的功耗,还更加符合市场需求,为公司带来了更多的商业机会。

川土(Chipanalog)公司的发展小趣事

为了进一步提升品牌影响力和市场竞争力,川土微电子开始积极寻求国际合作。公司与多家国际知名企业建立了合作关系,共同开发新产品、拓展新市场。同时,川土微电子还通过参加国际展会、发布新品等方式不断提升品牌知名度。这些努力不仅为公司带来了更多的商业机会,也为其在全球模拟芯片市场中树立了良好的形象。

Avel Lindberg公司的发展小趣事

2022年,川土微电子的CA-IS3062W产品荣获了中国IC设计成就奖之“年度最佳隔离器”。这一荣誉的获得不仅是对川土微电子技术实力的肯定,也进一步提升了公司在行业内的知名度。同时,这也为川土微电子未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

单片机小制作

适合于初学者 [ 本帖最后由 zhaobqing163 于 2008-11-29 18:17 编辑 ]…

查看全部问答>

求西门子plc的工业网络实验室的发展史

急求西门子plc的工业网络实验室的发展史。plc  的S7 300或者400的组成结构应用…

查看全部问答>

Keil 入门实例教程

Keil 入门实例教程…

查看全部问答>

STM8普及,无需ST-Link,新买的器件可以无限次数串口下载程序

STM8的单片机,只要内部是空的,就算Bootloader disable,也会上电运行Bootloader,可以从串口下载程序。新的器件虽然Bootloader disable,但是也可以用串口下载至少一次程序。 如果是一般的程序下载后,Bootloader是disable,那么不借助ST- ...…

查看全部问答>

请教大家一个很弱的问题,LM124是几伏电压供电?

在资料上看到LM124的供电电压范围是3~30V,可是我在调试板子的时候发现当变动LM124的供电电压时,输出端电压会随着改变,请问LM124的供电电压到底应该是多少?…

查看全部问答>

PLL输出差分时钟信号

请问如何用PLL#_CLKOUTp和 PLL#_CLKOUTn输出差分时钟,我先前都是用一般IO通过PLL中调整相位至180输出的,不知道用这两个脚如何实现。期待>>>>>>>>>>>>>>…

查看全部问答>

150°环境温度下使用的升压芯片

    我要做一个将锂电池3.7V升压到5V给单片机供电的电路,请求高手指教~~不胜感激~~…

查看全部问答>

LM3S8962模拟SPI驱动VS1003学习心得

LM3S8962模拟SPI驱动VS1003学习心得     倒腾了很久,参考了高手给我的一个程序,终于用VS1003听到声音了。这里也和大家分享一下我的学习心得~~人人助我,我助人人~~         这段时间仔细的研究了一下I ...…

查看全部问答>

MIPI 接口编程

大家看看用STM32给MIPI模块通信,大家帮忙看看方案可行不。附件是MIPI 的数据格式, 包括读和写。我原来想用PIC18F来做,利用SPI 可以做到高速写, 数据率10MHz, 但问题是 MIPI读写公用SDATA线,而PIC18F SPI 入和出是分开的 MOSI, MISO. 不知道有 ...…

查看全部问答>