148 lines
4.4 KiB
C
148 lines
4.4 KiB
C
#include "usart1_sdi.h"
|
||
#include "bsp.h"
|
||
//串口1中断服务程序
|
||
//注意,读取USARTx->SR能避免莫名其妙的错误
|
||
char USART1_SDI_RX_BUF[USART1_SDI_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
|
||
char USART1_SDI_TX_BUF[100];
|
||
//接收状态
|
||
//bit15, 接收完成标志
|
||
//bit14, 接收到0x0d
|
||
//bit13~0, 接收到的有效字节数目
|
||
u16 USART_SDI_RX_STA=0; //接收状态标记
|
||
|
||
void USART1_SDI_Configuration(u32 baund)
|
||
{
|
||
USART_InitTypeDef USART_InitStructure;
|
||
GPIO_InitTypeDef GPIO_InitStructure;
|
||
NVIC_InitTypeDef NVIC_InitStructure;
|
||
|
||
Enable_SDI_RS232=0;
|
||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1_SDI_SDI
|
||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOA时钟
|
||
|
||
//NVIC_Configuration();
|
||
|
||
USART_DeInit(USART1); //复位串口1
|
||
|
||
//USART1_SDI_SDI_TX PB.6 PB.7
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
|
||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||
|
||
|
||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
|
||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
|
||
|
||
|
||
USART_InitStructure.USART_BaudRate = baund;
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
|
||
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
||
USART_InitStructure.USART_Parity = USART_Parity_Even; //奇校验,数据位变为7位
|
||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
||
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
|
||
USART_Init(USART1,&USART_InitStructure);
|
||
|
||
USART_Cmd(USART1,ENABLE);
|
||
|
||
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启USART1_SDI_SDI的接收中断
|
||
//USART1_SDI_SDI NVIC 配置
|
||
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口3中断通道
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
|
||
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
|
||
|
||
USART_ClearFlag(USART1,USART_FLAG_TC); //清除发送完成标志位
|
||
}
|
||
|
||
void USART1_SDI_CLR_RXBuf(void)
|
||
{
|
||
memset(USART1_SDI_RX_BUF, 0, USART1_SDI_REC_LEN);
|
||
USART_SDI_RX_STA=0;
|
||
}
|
||
void USART1_SDI_SDI_CLR_TXBuf(void)
|
||
{
|
||
memset(USART1_SDI_TX_BUF, 0, 100);
|
||
|
||
}
|
||
|
||
void u1_printf(char* fmt,...)
|
||
{
|
||
u16 i,j;
|
||
va_list ap;
|
||
va_start(ap,fmt);
|
||
vsprintf((char*)USART1_SDI_TX_BUF,fmt,ap);
|
||
va_end(ap);
|
||
i=strlen((const char*)USART1_SDI_TX_BUF); //此次发送数据的长度
|
||
for(j=0;j<i;j++) //循环发送数据
|
||
{
|
||
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
|
||
USART_SendData(USART1,USART1_SDI_TX_BUF[j]);
|
||
}
|
||
}
|
||
//void timer4_init(void)
|
||
//{
|
||
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||
// NVIC_InitTypeDef NVIC_InitStructure;
|
||
|
||
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
|
||
// TIM_TimeBaseStructure.TIM_Period = 99;
|
||
// TIM_TimeBaseStructure.TIM_Prescaler = 3199;//中断时间10ms
|
||
// TIM_TimeBaseStructure.TIM_ClockDivision = 1;
|
||
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||
|
||
// TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
|
||
//
|
||
// /* TIM IT enable */
|
||
// TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
|
||
// TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
|
||
// /* TIM4 enable counter */
|
||
// TIM_Cmd(TIM4, DISABLE);
|
||
|
||
// /* Enable the TIM4 Interrupt */
|
||
//
|
||
// NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
|
||
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
|
||
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
// NVIC_Init(&NVIC_InitStructure);
|
||
//}
|
||
////设置TIM4的开关
|
||
////sta:0,关闭;1,开启;
|
||
//void TIM4_Set(unsigned char sta)
|
||
//{
|
||
// if(sta)
|
||
// {
|
||
//
|
||
// TIM_SetCounter(TIM4,0);//计数器清空
|
||
// TIM_Cmd(TIM4, ENABLE); //使能TIMx
|
||
// }else TIM_Cmd(TIM4, DISABLE);//关闭定时器2
|
||
//}
|
||
|
||
///**
|
||
// * @brief This function handles TIM4 global interrupt request.
|
||
// * @param None
|
||
// * @retval None
|
||
// */
|
||
//void TIM4_IRQHandler(void)
|
||
//{
|
||
// if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
|
||
// {
|
||
// USART_SDI_RX_STA|=1<<15; //标记接收完成;
|
||
// TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
|
||
// TIM4_Set(0); //关闭TIM4
|
||
//
|
||
// }
|
||
//}
|
||
|
||
//串口3,printf 函数
|
||
//确保一次发送数据不超过USART1_MAX_SEND_LEN字节
|
||
|
||
|
||
|
||
|
||
|