PLM-100 Module 에는 두채널의 UART(UART0, UART1) 통신을 지원한다.
Console을 사용하여 환경설정 및 데이터 송/수신을 할 수 있는 채널은 UART1 이다. (위의 자료는 수정이 필요)
아래 User Guide 13page 와 같이 AT+ 명령을 통하여 데이터를 송신 하며 수신된 결과 값을 Console 에서 확인 할 수 있다.
Test 구성은 PLM-100 모듈과 STM32F101C8T6 의 PA10(USART1 RXD), PA9(USART1 TXD) 핀과 PLM-100 pin 20(USART1 RXD), pin 19(USART1 TXD)에 연결하여 진행하였다.
컴파일러는 Keil uVsion5 으로 CubeMx 없이 hal 라이브러리를 사용하지 않고 코딩하였다.
(Slave 의 EUI 는 00:01:93 이다.)
#include "stm32f10x.h"
volatile unsigned int msTicks;
void LED_Init(void);
void UART_Init(void);
void Delay(unsigned int dlyTicks);
void SysTick_Handler(void) {
msTicks++;
}
int main(void)
{
unsigned char data[] = "AT+DATA=000193:HELLO\r";
int i = 0;
LED_Init();
UART_Init();
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock / 10000);
GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);
while (1) {
Delay(10000);
for (i = 0; i < sizeof(data)-1; i++) {
USART_SendData(USART1, data[i]);
Delay(50);
}
}
}
void LED_Init(void)
{
GPIO_InitTypeDef PORTB;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
PORTB.GPIO_Pin = GPIO_Pin_12;
PORTB.GPIO_Speed = GPIO_Speed_50MHz;
PORTB.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &PORTB);
}
void UART_Init(void)
{
GPIO_InitTypeDef PORTA;
USART_InitTypeDef USART1_struct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 |
RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE);
PORTA.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
PORTA.GPIO_Speed = GPIO_Speed_50MHz;
PORTA.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &PORTA);
USART_Cmd(USART1, ENABLE);
USART1_struct.USART_BaudRate = 115200;
USART1_struct.USART_WordLength = USART_WordLength_8b;
USART1_struct.USART_Parity = USART_Parity_No;
USART1_struct.USART_StopBits = USART_StopBits_1;
USART1_struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART1_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART1, &USART1_struct);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_EnableIRQ(USART1_IRQn);
}
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
if (USART_ReceiveData(USART1) != 0) {
GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
}
void Delay(unsigned int dlyTicks)
{
unsigned int curTicks;
curTicks = msTicks;
while ((msTicks - curTicks) < dlyTicks) {
__NOP();
}
}
[TEST 결과]
nRF51422-QFAB(GPIO/ADC) (0) | 2018.11.01 |
---|---|
MPU-9250 Module (2) | 2016.12.12 |
STM32F103VCT6 for MPU-9250 자이로 센서 StartUp (0) | 2016.09.26 |
STM32 Clock - 클럭 소스와 클럭 설정 (0) | 2016.09.23 |
[STM32F103VCT6] USART/FT232RL (0) | 2016.09.21 |