新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2021-11-21
- 在线时间
- 7 小时
|

楼主 |
发表于 2021-12-1 17:20:44
|
显示全部楼层
串口二初始化:
void usart2_init(u32 bound)
{
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// GPIOAê±Öó
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
USART_DeInit(USART2); //¸′λ′®¿ú1
//USART2_TX PA.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_Init(GPIOA, &GPIO_InitStructure); //3õê¼»ˉPA2
//USART2_RX PA.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PA.3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //éÏà-êäèë
GPIO_Init(GPIOA, &GPIO_InitStructure); //3õê¼»ˉPA3
USART_InitStructure.USART_BaudRate = bound; //ò»°ãéèÖÃÎa9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //×Ö3¤Îa8λêy¾Y¸ñê½
USART_InitStructure.USART_StopBits = USART_StopBits_1; //ò»¸öí£Ö1λ
USART_InitStructure.USART_Parity = USART_Parity_No; //ÎTÆæÅ¼D£Ñéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //êÕ·¢Ä£ê½
USART_Init(USART2, &USART_InitStructure); //3õê¼»ˉ′®¿ú2
//2¨ìØÂêéèÖÃ
//USART2->BRR=(pclk1*1000000)/(bound);// 2¨ìØÂêéèÖÃ
//USART2->CR1|=0X200C; //1λí£Ö1,ÎTD£Ñéλ.
USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE); //ê1Äü′®¿ú2μÄDMA·¢Ëí
UART_DMA_Config(DMA1_Channel7, (u32)&USART2->DR, (u32)USART2_TX_BUF); //DMA1í¨μà7,íaéèÎa′®¿ú2,′æ′¢Æ÷ÎaUSART2_TX_BUF
USART_Cmd(USART2, ENABLE); //ê1Äü′®¿ú
#ifdef USART2_RX_EN //èç1ûê1Äüá˽óêÕ
//ê1Äü½óêÕÖD¶Ï
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿aÆôÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2 ; //ÇàÕ¼óÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×óóÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μàê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
TIM4_Init(99, 7199); //10msÖD¶Ï
USART2_RX_STA = 0; //Çåáã
TIM4_Set(0); //1رն¨ê±Æ÷4
#endif
拍照:
u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode)
{
FIL* f_bmp;
u16 bmpheadsize; //bmpí·′óD¡
BITMAPINFO hbmp; //bmpí·
u8 res=0;
u16 tx,ty; //í¼Ïñ3ß′ç
u16 *databuf; //êy¾Y»o′æÇøμØÖ·
u16 pixcnt; //ÏñËØ¼ÆêyÆ÷
u16 bi4width; //ˮƽÏñËØ×Ö½úêy
if(width==0||height==0)return PIC_WINDOW_ERR; //Çøóò′íÎó
if((x+width-1)>lcddev.width)return PIC_WINDOW_ERR; //Çøóò′íÎó
if((y+height-1)>lcddev.height)return PIC_WINDOW_ERR; //Çøóò′íÎó
#if BMP_USE_MALLOC == 1 //ê1óÃmalloc
databuf=(u16*)mymalloc(1024); //¿a±ùÖáéùbi4width′óD¡μÄ×Ö½úμÄÄú′æÇøóò ,¶Ô240¿íμÄÆá,480¸ö×Ö½ú¾í1»áË.
if(databuf==NULL)return PIC_MEM_ERR; //Äú′æéêÇëê§°ü.
f_bmp=(FIL *)mymalloc(sizeof(FIL)); //¿a±ùFIL×Ö½úμÄÄú′æÇøóò
if(f_bmp==NULL) //Äú′æéêÇëê§°ü.
{
myfree(databuf);
return PIC_MEM_ERR;
}
#else
databuf=(u16*)bmpreadbuf;
f_bmp=&f_bfile;
#endif
bmpheadsize=sizeof(hbmp);//μÃμ½bmpÎļtí·μÄ′óD¡
mymemset((u8*)&hbmp,0,sizeof(hbmp));//ÖÃáã¿ÕéêÇëμ½μÄÄú′æ.
hbmp.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);//DÅÏ¢í·′óD¡
hbmp.bmiHeader.biWidth=width; //bmpμÄ¿í¶è
hbmp.bmiHeader.biHeight=height; //bmpμĸ߶è
hbmp.bmiHeader.biPlanes=1; //oãÎa1
hbmp.bmiHeader.biBitCount=16; //bmpÎa16λé«bmp
hbmp.bmiHeader.biCompression=BI_BITFIELDS;//ÿ¸öÏóËØμıèìØóéÖ¸¶¨μÄÑúÂë¾ö¶¨¡£
hbmp.bmiHeader.biSizeImage=hbmp.bmiHeader.biHeight*hbmp.bmiHeader.biWidth*hbmp.bmiHeader.biBitCount/8;//bmpêy¾YÇø′óD¡
hbmp.bmfHeader.bfType=((u16)'M'<<8)+'B';//BM¸ñê½±êÖ¾
hbmp.bmfHeader.bfSize=bmpheadsize+hbmp.bmiHeader.biSizeImage;//Õû¸öbmpμÄ′óD¡
hbmp.bmfHeader.bfOffBits=bmpheadsize;//μ½êy¾YÇøμÄÆ«òÆ
hbmp.RGB_MASK[0]=0X00F800; //oìé«ÑúÂë
hbmp.RGB_MASK[1]=0X0007E0; //Âìé«ÑúÂë
hbmp.RGB_MASK[2]=0X00001F; //à¶é«ÑúÂë
if(mode==1)res=f_open(f_bmp,(const TCHAR*)filename,FA_READ|FA_WRITE);//3¢êÔ′ò¿a֮ǰμÄÎļt
if(mode==0||res==0x04)res=f_open(f_bmp,(const TCHAR*)filename,FA_WRITE|FA_CREATE_NEW);//Ä£ê½0,»òÕß3¢êÔ′ò¿aê§°ü,Ôò′′½¨DÂÎļt
if((hbmp.bmiHeader.biWidth*2)%4)//ˮƽÏñËØ(×Ö½ú)2»Îa4μı¶êy
{
bi4width=((hbmp.bmiHeader.biWidth*2)/4+1)*4;//êμ¼êòaD′èëμÄ¿í¶èÏñËØ,±ØDëÎa4μı¶êy.
}else bi4width=hbmp.bmiHeader.biWidth*2; //¸ÕoÃÎa4μı¶êy
if(res==FR_OK)//′′½¨3é1|
{
res=f_write(f_bmp,(u8*)&hbmp,bmpheadsize,&bw);//D′èëBMPê×2¿
for(ty=y+height-1;hbmp.bmiHeader.biHeight;ty--)
{
pixcnt=0;
for(tx=x;pixcnt!=(bi4width/2);)
{
if(pixcnt<hbmp.bmiHeader.biWidth)databuf[pixcnt]=LCD_ReadPoint(tx,ty);//¶áè¡×ø±êμãμÄÖμ
else databuf[pixcnt]=0Xffff;//213ä°×é«μÄÏñËØ.
pixcnt++;
tx++;
}
hbmp.bmiHeader.biHeight--;
res=f_write(f_bmp,(u8*)databuf,bi4width,&bw);//D′èëêy¾Y
}
f_close(f_bmp);
}
#if BMP_USE_MALLOC == 1 //ê1óÃmalloc
myfree(databuf);
myfree(f_bmp);
#endif
return res;
} |
|