今天捣鼓串口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); // ·¢ËÍÊý¾Ý
- }
- }
效果图:
|