Merhaba arkadaşlar, bir tasarım ödevim var. STM32 Kullanarak BT bağlantısı ile DC motor kontrol edeceğim. Keil MDK V5. ve CubeMx kullanıyorum.
Öncelikle Bluetooth bağlantısı kullanarak Bluetooth modülüne bir dizi göndermeyi ve bu diziyi bilgisayardaki seri port okuma programlarından okumayı hedefledim.
USART ayarlarını ve pin bağlantılarını CubeMx üzerinden ayarladıktan sonra Keil'da küçük bir program yazdım. Buna göre STM32 Nucleo'nun USART2'sini kullanıp, A2 (Tx) ve A3 (Rx) pinleri ile haberleşme yapacaktım. Kodda bunları ayarladım.
Tabii ki Bluetooth bağlantılarını ayarladım. HC06 modülü kullanıyorum. 5V ile besliyorum. Modülün Tx'ine işlemcinin Rx'ini, Rx'ine ise işlemcinin Tx'ini bağladım. Ancak tuhaf bir hatayla karşılaştım: Bluetooth'tan veri okuyamadım ve STM'in bağlandığı porttan veri okuyabildiğimi gördüm. Neyi kaçırıyorum? Bağlantılarımı defalarca kontrol ettim. Acaba komutum Rx ve Tx pinlerini kullanmamı sağlamıyor mu?
Öncelikle Bluetooth bağlantısı kullanarak Bluetooth modülüne bir dizi göndermeyi ve bu diziyi bilgisayardaki seri port okuma programlarından okumayı hedefledim.
USART ayarlarını ve pin bağlantılarını CubeMx üzerinden ayarladıktan sonra Keil'da küçük bir program yazdım. Buna göre STM32 Nucleo'nun USART2'sini kullanıp, A2 (Tx) ve A3 (Rx) pinleri ile haberleşme yapacaktım. Kodda bunları ayarladım.
Tabii ki Bluetooth bağlantılarını ayarladım. HC06 modülü kullanıyorum. 5V ile besliyorum. Modülün Tx'ine işlemcinin Rx'ini, Rx'ine ise işlemcinin Tx'ini bağladım. Ancak tuhaf bir hatayla karşılaştım: Bluetooth'tan veri okuyamadım ve STM'in bağlandığı porttan veri okuyabildiğimi gördüm. Neyi kaçırıyorum? Bağlantılarımı defalarca kontrol ettim. Acaba komutum Rx ve Tx pinlerini kullanmamı sağlamıyor mu?
Keil main Kodu:
void SystemClock_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
while (1)
{
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)==0){
char mes[] = "hello\r\n";
HAL_UART_Transmit(&huart2, (uint8_t*)mes, strlen(mes), 1000);
HAL_Delay(1000);
}
else
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(100);
}
}
}
Keil USART Kodu:
#include "usart.h"
#include "gpio.h"
UART_HandleTypeDef huart2;
void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(uartHandle->Instance==USART2)
{
__HAL_RCC_USART2_CLK_ENABLE();
/**USART2 GPIO Configuration
PA2 ------> USART2_TX
PA3 ------> USART2_RX
*/
GPIO_InitStruct.Pin = USART_TX_Pin|USART_RX_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
if(uartHandle->Instance==USART2)
{
__HAL_RCC_USART2_CLK_DISABLE();
/**USART2 GPIO Configuration
PA2 ------> USART2_TX
PA3 ------> USART2_RX
*/
HAL_GPIO_DeInit(GPIOA, USART_TX_Pin|USART_RX_Pin);
}
}
Kolay gelsin, iyi forumlar...
(kod için kullandığım kaynak:https://www.dmcinfo.com/latest-thinking/blog/id/9372/nucleo-uart-tutorial)
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.