新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2019-11-12
- 在线时间
- 6 小时
|
1金钱
if(h==50)
{
rs232buf[0]=0x5A;
rs232buf[1]=0xA5;
rs232buf[2]=0x05;
rs232buf[3]=0x82;
rs232buf[4]=0x00;
rs232buf[5]=0x05;
rs232buf[6]=0x00;
rs232buf[7]=0x07;
RS232_Send_Data(rs232buf,8);
LED2=!LED2;
h=0;
}
void RS232_Init(u32 pclk1,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk1*1000000)/(bound*16); //得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
GPIOC->CRH&=0XFFFF00FF; //IO状态设置
GPIOC->CRH|=0X00008B00; //IO状态设置
RCC->APB1ENR|=1<<19; //使能串口时钟
RCC->APB1RSTR|=1<<19; //复位串口4
RCC->APB1RSTR&=~(1<<19);//停止复位
//波特率设置
UART4->BRR=mantissa; // 波特率设置
UART4->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_UART4_RX //如果使能了接收
//使能接收中断
UART4->CR1|=1<<8; //PE中断使能
UART4->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,UART4_IRQn,2);//组2,最低优先级
#endif
}
void RS232_Send_Data(u8 *buf,u8 len)
{
u8 t;
for(t=0;t<len;t++) //循环发送数据
{
while((UART4->SR&0X40)==0);//等待发送结束
UART4->DR=buf[t];
}
while((UART4->SR&0X40)==0);//等待发送结束
RS232_RX_CNT=0;
}
|
|