lixiang
获得 1 次赞
帮助过127人
小车由一个12V的锂电池供电。单片机由12V经过降压模块降到3.3V供电。电机直接由12V电池供电。4个电机启动,工作时电流都比较大,可能把降压模块的输入端的电压拉低,进而导致单片机不能正常工作。如果用一个电池需不需要将电机的地和单片机3.3v地隔离呢?
本人有一个项目需要用到两个16路开关对传感器进行扫描,需要用到ADC然后通过串口发送。结果发现传送速度真的很慢,而且已经开启了DMA。求问大佬怎样才能提高传输速度#include "adc.h" #include "delay.h" #include "usart.h" #include "high.h" #include "DMA.h" extern __IO uint16_t ADC_ConvertedValue; u8 FSR_BUF[514]; // void control() // { // vcc1_en=0; // gnd1_en=0; // } int channel[16][4]= { {0000}//channel 0 {1000}//channel 1 {0100}//channel 2 {1100}//channel 3 {0010}//channel 4 {1010}//channel 5 {0110}//channel 6 {1110}//channel 7 {0001}//channel 8 {1001}//channel 9 {0101}//channel 10 {1101}//channel 11 {0011}//channel 12 {1011}//channel 13 {0111}//channel 14 {1111} //channel 15 }; void getadc() { volatile int k=1; volatile int ijapm; float temp; FSR_BUF[0]=238; FSR_BUF[513]=255; vcc1_en=0; gnd1_en=0; vcc2_en=1; gnd2_en=1; for(i=0;i<16;i++) { vcc1_s0=channel[i][0]; vcc1_s1=channel[i][1]; vcc1_s2=channel[i][2]; vcc1_s3=channel[i][3]; for(j=0;j<16;j++) { gnd1_s0=channel[j][0]; gnd1_s1=channel[j][1]; gnd1_s2=channel[j][2]; gnd1_s3=channel[j][3]; delay_ms(1); temp=(float) ADC_ConvertedValue*(3.3/4096); p=-7.89551702691597*temp*temp*temp*temp*temp+84.1041604009715*temp*temp*temp*temp-378.645330958236*temp*temp*temp+937.394903665604*temp*temp-1350.80007444151 *temp+956.225199319509; if (p>250||p<=0) { p=0; } FSR_BUF[k]=p; k++; } } vcc1_en=1; gnd1_en=1; vcc2_en=0; gnd2_en=0; for(i=0;i<16;i++) { vcc2_s0=channel[i][0]; vcc2_s1=channel[i][1]; vcc2_s2=channel[i][2]; vcc2_s3=channel[i][3]; for(j=0;j<16;j++) { gnd2_s0=channel[j][0]; gnd2_s1=channel[j][1]; gnd2_s2=channel[j][2]; gnd2_s3=channel[j][3]; delay_ms(1); temp=(float) ADC_ConvertedValue*(3.3/4096); p=-7.89551702691597*temp*temp*temp*temp*temp+84.1041604009715*temp*temp*temp*temp-378.645330958236*temp*temp*temp+937.394903665604*temp*temp-1350.80007444151 *temp+956.225199319509; if (p>250||p<=0) { p=0; } FSR_BUF[k]=p; k++; } } USART_DMACmd(USART1USART_DMAReq_TxENABLE); MYDMA_Enable(DMA1_Channel4); } int main(void) { delay_init(); //delay_ms(1); //延时函数初始化 uart_init(9600); //串口初始化为9600 ADC1_Init(); //ADC初始化 HIGH_Init(); //control(); MYDMA_Config(DMA1_Channel4(u32)&USART1->DR(u32)FSR_BUF514);//DMA1通道4外设为串口1存储器为SendBuff长(TEXT_LENTH+2)*100. while(1) { getadc(); delay_ms(4); } } 复制代码
自学FPGA处处碰壁。当然时间长了,现在感觉好了一点。可是还是摸不到门路。学习的方法和设计的思路,都基本上是瞎子摸象,没有人带真的是很盲目。各位老司机,可以说一说你们是怎么学的吗?
【节日专享】ESP8266、STM32小系统板等免费送!点击领取https://www.icxbk.com/ask/detail/31744.html在玩STM32的时候,我们习惯在Windows下使用Keil5IAR等集成开发环境,对里面的内部机制实现过程都不清楚。请教如何搭建Linux下的环境,可以适应任意开发板?
#include<reg51.h> sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; sbit motor1=P1^1; unsigned int speed; unsigned int value; unsigned int T; unsigned char code ZF[]=" Speed= "; //8个字符 void INIT(); void INIT0(); void INIT1(); void Timer(); void Timer0(); void delay(unsigned t); void init_lcd(void); void writecom(unsigned char com); void writedate(unsigned char date); void motor(int speed); main() { int i; T=0; speed=0; INIT(); Timer(); init_lcd(); for(i=0;i<8;i++) { writedate(ZF[i]); } while(1) { if(k1==0) { delay(10); if(k1==0) { int a; motor1=0; while((a<50)&&k1==0) { delay(10); a++; } a=0; } motor(speed); writecom(0x88); writedate('1'); } else { if(k2==0) { delay(10); if(k2==0) { int b; motor1=1; while((b<50)&&k2==0) { delay(10); b++; } b=0; } } motor(speed); writecom(0x88); writedate('4'); } } } void INIT() //k2k3外部中断初始化 { IT0=1; EX0=1; IT1=1; EX1=1; EA=0; } void INIT0()interrupt 0 //外部中断0服务函数 { delay(10); if(k3==0) { speed++; } } void INIT1()interrupt 2//外部中断1服务函数 { delay(10); if(k4==0) { if(speed>0) { speed--; } else speed=0; } } void Timer() //定时器初始化 { TMOD=0x01; TH0=0xfc; //初值fc18---1ms TL0=0x18; EA=1; ET0=1; TR0=1; } void Timer0()interrupt 1 //定时器服务函数 { TH0=0xfc; TL0=0x18; T++; } void delay(unsigned t) //延时函数精确到ms { if(T=t) { while(--t); } T=0; }