LKS32MC07EM6S8B的串口无法使用(不能收发数据),使用的03系列串口demo工程修改的程序,使用P1.8和P1.9做串口的数据收发,修改了GPIO的初始化引脚以及串口的波特率,其他的未做修改,启用了复用以及SYS_IO_CFG清零。详细如下,望能帮助解决,谢谢。
GPIO和串口初始化
/*******************************************************************************
函数名称: void GPIO_init(void)
功能描述: GPIO硬件初始化
输入参数: 无
输出参数: 无
返 回 值: 无
其它说明:
修改日期 版本号 修改人 修改内容
-----------------------------------------------------------------------------
2022/4/14 V1.0 HuangMG 创建
*******************************************************************************/
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
/* 写保护开启 */
SYS_WR_PROTECT = 0x7a83;
/* change SWCKL AND SWDIO TO GPIO */
SYS_IO_CFG &= (~BIT6);
/* P0.9-RX0, P0.8-TX0 UART0 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIO1, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIO1, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIO1, GPIO_PinSource_8, AF4_UART); //P0.9复用为UART_RX
GPIO_PinAFConfig(GPIO1, GPIO_PinSource_9, AF4_UART); //P0.7复用为UART_TX
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIO1, &GPIO_InitStruct);
}
/*******************************************************************************
函数名称: void UART_init(void)
功能描述: 串口硬件初始化
输入参数: 无
输出参数: 无
返 回 值: 无
其它说明:
修改日期 版本号 修改人 修改内容
-----------------------------------------------------------------------------
2022/4/14 V1.0 HuangMG 创建
*******************************************************************************/
void UART_init(void)
{
UART_InitTypeDef UART_InitStruct;
UART_StructInit(&UART_InitStruct);
UART_InitStruct.BaudRate = 38400; /* 设置波特率9600 */
UART_InitStruct.WordLength = UART_WORDLENGTH_8b; /* 发送数据长度8位 */
UART_InitStruct.StopBits = UART_STOPBITS_1b; /* 停止位长度1位 */
UART_InitStruct.FirstSend = UART_FIRSTSEND_LSB; /* 先发送LSB */
UART_InitStruct.ParityMode = UART_Parity_NO; /* 无奇偶校验 */
UART_InitStruct.RXD_INV = DISABLE; /* RXD电平正常输出*/
UART_InitStruct.TXD_INV = DISABLE; /* TXD电平正常输出*/
/*使能接收和发送完成中断*/
UART_InitStruct.IRQEna = UART_IRQEna_SendOver | UART_IRQEna_RcvOver;
UART_Init(UART0, &UART_InitStruct);
}
//下面是串口的中断
/*******************************************************************************
函数名称: void UART_IRQHandler(void)
功能描述: UART中断处理函数
输入参数: 无
输出参数: 无
返 回 值: 无
其它说明:
修改日期 版本号 修改人 修改内容
-----------------------------------------------------------------------------
2021/11/15 V1.0 HuangMG 创建
*******************************************************************************/
u8 Uart0_Buff = 0;
void UART_IRQHandler(void)
{
if (UART_GetIRQFlag(UART0, UART_IF_SendOver)) // 发送完成中断
{
UART_ClearIRQFlag(UART0, UART_IF_SendOver); // 清除发送完成标志位
}
if (UART_GetIRQFlag(UART0, UART_IF_RcvOver)) // 接收完成中断
{
UART_ClearIRQFlag(UART0, UART_IF_RcvOver); // 清除接收完成标志位
Uart0_Buff = UART_ReadData(UART0); // 接收 1 Byte数据
printf("Hellow word = %d \n\r", Uart0_Buff); // 发送数据
}
}
//主函数程序
int main(void)
{
Hardware_init(); /* 硬件初始化 */
for (;;)
{
UART_SendData(UART0, 0x66);
Invers_GPIO(GPIO1,GPIO_Pin_7);
printf("Hellow word!"); // 发送数据
delay_ms(100);
}
}
|