今天捣鼓串口0发送接收。一开始用P0.7发送,后来发现P0.7接在电压检测上,用不成。接收是P0.9。
所以改为P0.5。
原理图:
看了一下手册,有个奇怪的地方:
第5脚既可以做P0.8也可以做P0.9.
代码:
主程序:
#include "lks32mc03x_lib.h"
#include "hardware_init.h"
#include "delay.h"
/*******************************************************************************
º¯ÊýÃû³Æ£º int main(void)
¹¦ÄÜÃèÊö£º Ö÷³ÌÐòÈë¿Ú
ÊäÈë²ÎÊý£º ÎÞ
Êä³ö²ÎÊý£º ÎÞ
·µ »Ø Öµ£º ÎÞ
ÆäËü˵Ã÷£º ±¾ÊµÑéʹÓÃLKS32MC033H6P8µÄP0.9¸´ÓÃΪUART_RX,P0.7¸´ÓÃΪUART_TX½øÐд®¿Ú
ͨѶʵÑ飬UART²¨ÌØÂÊΪ9600£¬Êý¾Ý³¤¶È8룬1λֹͣ룬ÎÞÆæżУÑ飬ÏÈ·¢ËÍ
LSB¡£ÊµÑ鿪ÆôUART·¢ËÍÍê³ÉºÍ½ÓÊÕÍê³ÉÖжϣ¬ÔÚ·¢ËÍÍê³ÉÖжÏÖ»Çå³ý·¢ËÍÍê³É±ê
־룬ÔÚ½ÓÊÕÍê³ÉÖжÏÄÚ½øÐÐÊý¾Ý½ÓÊÕ£¬²¢°Ñ½ÓÊÕµÄÊý¾Ý·¢ËͳöÈ¥¡£
ÔËÐÐЧ¹û£º ½«³ÌÐòÉÕ¼µ½demo°åºó£¬Ê¹Óô®¿ÚÁ¬½Óµ½µçÄÔ´®¿ÚÖúÊÖ»òÕßÁíÒ»¸ödemoÉÏ£¬µçÄÔ´®¿Ú
ÖúÊÖ»òÕßÁíÒ»¸ödemo·¢ËÍÒ»¸öbyteÊý¾Ý£¬Ôò¸ÃоƬ»á·µ»Ø·¢Ë͵ÄÊý¾Ý¡£
ÐÞ¸ÄÈÕÆÚ °æ±¾ºÅ ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
-----------------------------------------------------------------------------
2022/4/14 V1.0 HuangMG ´´½¨
*******************************************************************************/
int main(void)
{
Hardware_init(); /* Ó²¼þ³õʼ»¯ */
for (;;)
{
delay_ms(100);
}
}
初始化代码:
void Hardware_init(void)
{
__disable_irq(); /* ¹Ø±ÕÖÐ¶Ï ÖжÏ×Ü¿ª¹Ø */
SYS_WR_PROTECT = 0x7a83; /* ¿ªÆôдʹÄÜ*/
IWDG_DISABLE(); /* ¹Ø±Õ¶ÀÁ¢¿´ÃŹ·Ê¹ÄÜ*/
FLASH_CFG |= 0x00080000; /* FLASH Ԥȡ¼ÓËÙʹÄÜ*/
delay_init(48); /* ÑÓʱº¯Êý³õʼ»¯Ê±ÖÓ48MHz*/
GPIO_init(); /* GPIO³õʼ»¯ */
UART_init(); /* UART_init³õʼ»¯ */
delay_us(100); /* ÑÓʱµÈ´ýÓ²¼þ³õʼ»¯Îȶ¨ */
NVIC_EnableIRQ(UART_IRQn); /* ʹÄÜUART_IRQnÍⲿÖжÏ*/
NVIC_SetPriority(UART_IRQn, 0); /* UART_IRQnÍⲿÖжÏÓÅÏȼ¶ÉèÖÃΪ0*/
__enable_irq(); /* ¿ªÆô×ÜÖÐ¶Ï */
}
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
/* P0.9-RX0, P0.7-TX0 UART0 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIO0, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIO0, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIO0, GPIO_PinSource_9, AF4_UART); //P0.9¸´ÓÃΪUART_RX
GPIO_PinAFConfig(GPIO0, GPIO_PinSource_5, AF4_UART); //P0.7¸´ÓÃΪUART_TX
}
void UART_init(void)
{
UART_InitTypeDef UART_InitStruct;
UART_StructInit(&UART_InitStruct);
UART_InitStruct.BaudRate = 9600; /* ÉèÖò¨ÌØÂÊ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);
}
中断函数:
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 = %c \n\r", Uart0_Buff); // ·¢ËÍÊý¾Ý
}
}
效果图:
|