STM8L05单片机串口无法使用问题
时间:10-02
整理:3721RD
点击:
我使用的是STM8L052C6T6单片机,将串口映射到PC5和PC6,在使用串口的时候发现无论如何怎么搞都无法使用,各位大神帮帮看看哪里出现问题,代码如下:
void CLK_Config(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);//使用内部高速时钟
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);//使用内部 高速时钟作为系统时钟源
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//1分频
}
void USART1_Config(void)
{
GPIO_Init(GPIOC,GPIO_Pin_5,GPIO_Mode_Out_PP_High_Fast);//TXD输出上拉高速
GPIO_Init(GPIOC,GPIO_Pin_6,GPIO_Mode_In_PU_No_IT);//RXD 输入上拉无中断
CLK_PeripheralClockConfig(CLK_Peripheral_USART1,ENABLE);//使能串口1时钟
SYSCFG_REMAPDeInit();//恢复重映射默认值
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE);//USART1映射到PC5/PC6
USART_DeInit(USART1);//恢复串口1默认配置
USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_DMAReq_TX|U SART_DMAReq_RX);//串口1、波特率9600、长度8位、停止位1位、校验无、允许发送和接收
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志位
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启中断接收
USART_Cmd(USART1,ENABLE);//打开串口1
}
void main(void)
{
CLK_Config();
LED_Init();
USART1_Config();
while (1)
{
GPIO_SetBits(GPIOD,GPIO_Pin_5);
USART_SendData8(USART1,0x01);
delay(500);
GPIO_ResetBits(GPIOD,GPIO_Pin_5);
USART_SendData8(USART1,0x02);
delay(500);
}
}
void CLK_Config(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);//使用内部高速时钟
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);//使用内部 高速时钟作为系统时钟源
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//1分频
}
void USART1_Config(void)
{
GPIO_Init(GPIOC,GPIO_Pin_5,GPIO_Mode_Out_PP_High_Fast);//TXD输出上拉高速
GPIO_Init(GPIOC,GPIO_Pin_6,GPIO_Mode_In_PU_No_IT);//RXD 输入上拉无中断
CLK_PeripheralClockConfig(CLK_Peripheral_USART1,ENABLE);//使能串口1时钟
SYSCFG_REMAPDeInit();//恢复重映射默认值
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE);//USART1映射到PC5/PC6
USART_DeInit(USART1);//恢复串口1默认配置
USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_DMAReq_TX|U SART_DMAReq_RX);//串口1、波特率9600、长度8位、停止位1位、校验无、允许发送和接收
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志位
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启中断接收
USART_Cmd(USART1,ENABLE);//打开串口1
}
void main(void)
{
CLK_Config();
LED_Init();
USART1_Config();
while (1)
{
GPIO_SetBits(GPIOD,GPIO_Pin_5);
USART_SendData8(USART1,0x01);
delay(500);
GPIO_ResetBits(GPIOD,GPIO_Pin_5);
USART_SendData8(USART1,0x02);
delay(500);
}
}
解决了,配置写法错误,改成
USART_Init(USART1,(u32)9600, USART_WordLength_8b, USART_StopBits_1,USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));
就行了