一、基于RS232的串口重映射
RS232是全双工的,基于RS232的串口重映射实现就很简单,官方例程有提供,不再赘述;
int fputc(int ch,FILE *p)
{
usart_data_transmit(USART0,(u8)ch);
while(!usart_flag_get(USART0,USART_FLAG_TBE));
return ch;
}
二、基于RS485的串口打印输出
大部分的RS485芯片支持半双工通讯模式,与RS232的全双工不同多了一个收发控制,同一时刻最多只能处于收发模式中的一种,
利用编译器下的库实现,包含头文件如图,,因为需要用到va_list 类和“vsnprintf()”函数,需要将“stdarg.h”等头文件添加
三、程序
(1)、串口初始化
void USART1_Init(u32 bound)
{
//时钟设置
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART1);
//USARTx_TX
gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_2);
//USARTx_RX
gpio_init(GPIOA,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_3);
#if RS485_USART1==1
gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);
RS485_USART1_TX_EN=0;
#endif
//NVIC 配置
nvic_irq_enable(USART1_IRQn,0,2);
//USARTx初始化
usart_baudrate_set(USART1,bound);
usart_parity_config(USART1,USART_PM_NONE);
usart_word_length_set(USART1,USART_WL_8BIT);
usart_stop_bit_set(USART1,USART_STB_1BIT);
usart_transmit_config(USART1,USART_TRANSMIT_ENABLE);
usart_receive_config(USART1,USART_RECEIVE_ENABLE);
usart_hardware_flow_rts_config(USART1,USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART1,USART_CTS_DISABLE);
//使能配置
usart_interrupt_enable(USART1,USART_INT_RBNE);
usart_interrupt_enable(USART1,USART_INT_IDLE);//开启串口空闲IDEL中断
usart_enable(USART1); //使能串口
USART1_printf("USART1 OK...\r\n");
}
(2)、RS485打印函数
void USART1_printf (char *fmt, ...)
{
u16 i = 0;
va_list arg_ptr;
va_start(arg_ptr, fmt);
vsnprintf((char *)USART1_TX_BUF, USART1_MAX_TX_LEN+1, fmt, arg_ptr);
va_end(arg_ptr);
#if RS485_USART1==1
RS485_USART1_TX_EN=1;
#endif
while ((i < USART1_MAX_TX_LEN) && USART1_TX_BUF[i])
{
while (usart_flag_get(USART1, USART_FLAG_TBE) == RESET);
usart_data_transmit(USART1, (u8) USART1_TX_BUF[i++]);
while (usart_flag_get(USART1, USART_FLAG_TC) == RESET);
}
#if RS485_USART1==1
RS485_USART1_TX_EN=0;
#endif
}
(3)主函数
int main(void)
{
sysdelay_set(96);
led_set();
USART1_Init(9600);
while (1)
{
led_on(5);
delay_nms(500);
USART1_printf("led on\r\n");
led_off(5);
delay_nms(500);
USART1_printf("led off\r\n");
}
}
四、验证结果
|