WS103C8例程——串口2【worldsing笔记】
在超MINI核心板 stm32F103C8最小系统板上调试Usart2功能:用Jlink 6Pin接口连接WStm32f103c8的Uart2,PC机向mcu发送数据,mcu收到数据后数据加1,回传给PC,并把
D1 指示灯状态取反.
硬件连接:
1、R27 悬空不焊接;
2、将P输出TTL接口的TX连接到超MINI核心板 stm32F103C8最小系统板的RX2;
3、将P输出TTL接口的RX连接到超MINI核心板 stm32F103C8最小系统板的TX2;
串口配置uart2.c:
/*------------------------------------------------------- * @ 功能:usart2Init()串口2初始化 9600, 8, N, 1 * PA2 -> TX2 * PA3 -> RX2 * @ 参数:无 * @ 返回:无 *------------------------------------------------------- */ void usart2Init(void) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(UART_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE); if(UART == USART1) RCC_APB2PeriphClockCmd(UART_CLK, ENABLE); else RCC_APB1PeriphClockCmd(UART_CLK, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = UART_IRQ_N; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); GPIO_InitStructure.GPIO_Pin = UART_RX_PIN; //RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(UART_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = UART_TX_PIN; //TX GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(UART_GPIO, &GPIO_InitStructure); USART_StructInit(&USART_InitStructure); USART_Init(UART, &USART_InitStructure); USART_ITConfig(UART, USART_IT_RXNE, ENABLE); USART_Cmd(UART, ENABLE); } /*------------------------------------------------------- * @ 功能:中断接收,数据值+1再发送 * @ 参数:无 * @ 返回:无 *------------------------------------------------------- */ void UART_IRQ_HANDLER(void) { char ch; if (USART_GetITStatus(UART, USART_IT_RXNE) != RESET) { ch = USART_ReceiveData(UART); usart2SendChar(ch + 1); LED_REV(); } } /*------------------------------------------------------- * @ 功能:发送 * @ 参数:无 * @ 返回:无 *------------------------------------------------------- */ void usart2SendChar(u8 ch) { while (USART_GetFlagStatus(UART, USART_FLAG_TC) == RESET); USART_SendData(UART, (uint8_t)ch); while (USART_GetFlagStatus(UART, USART_FLAG_TC) == RESET); }
uart2.h
/******************************************************************************** * @File : uart1.h * @Author : worldsing * @Version: V0.1 * @Date : 2014/04/05 * @Brief : ******************************************************************************* * @Attention: */ #ifndef __UART1__ #define __UART1__ #include "stm32f10x.h" #include "system_stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "misc.h" #include "uart.h" #define UART USART2 #define UART_GPIO GPIOA #define UART_CLK RCC_APB1Periph_USART2 #define UART_IRQ_N USART2_IRQn #define UART_TX_PIN GPIO_Pin_2 #define UART_RX_PIN GPIO_Pin_3 #define UART_GPIO_CLK RCC_APB2Periph_GPIOA #define UART_IRQ_HANDLER USART2_IRQHandler void usart2Init(void); void USART2_IRQHandler(void); void usart2SendChar(u8 ch); #endif //end of file
上位机发送55,超MINI核心板 stm32F103C8最小系统板回复56,LED状态取反;
实物演示
功能连接说明:
1、使用stm32F103C8最小系统板 Uart1 的232电平接口时把R26焊接成0R,P1的pin17, p18悬空;
2、使用stm32F103C8最小系统板 Uart2 的232电平接口时把R27焊接成0R,R17、R12悬空、P2的pin2、pin3悬空;
4、使用stm32F103C8最小系统板 Uart1 的TTL电平接口时把R26悬空,信号连接到P1的pin17, p18;
5、使用stm32F103C8最小系统板 Uart2 的TTL电平接口时把R27悬空,信号连接到P3的pin9, pin12或连接到P2的pin2、pin3;
6、使用stm32F103C8最小系统板 USB转串的TTL电平接口时,直接连接到P1的pin15,pin16;
7、使用stm32F103C8最小系统板 USB转串连接到CPU内部的uart1时,P1的pin17与pin15短接,pin18与pin16短接;
8、使用stm32F103C8最小系统板 Uart2的485接口时,R17和R12焊接0R,P2的pin2、pin3悬空,P3的pin9, pin12悬空,R27悬空;
9、使用stm32F103C8最小系统板 USB接口连接到CPU是,焊接R14,R15为22R,R3,R4悬空,R1,R2悬空;
10、使用stm32F103C8最小系统板 CAN接口连接到CPU是,焊接R1,R2为22R,R3,R4悬空,R14,R15悬空;
11、使用stm32F103C8最小系统板 不焊接CPU时可以做独立的1通道USB转串功能;
12、使用stm32F103C8最小系统板 不焊接CPU时可以做独立的2通道TTL转232功能;
13、使用stm32F103C8最小系统板 不焊接CPU时可以做独立的1通道485转TTL功能,外置三级管;
14、使用stm32F103C8最小系统板 不焊接CPU时可以做独立的1通道CAN转TTL功能;