2014-03-17 08:56 AM
I'm having a problem with my usart communication between stm32f4 and hc-05 bluetooth module. I'm trying to configure the AT command of HC-05 using the stm32 board and i'm checking the response using the USB serial module and serial monitor. But i'm not getting any response. I'm using USART3. Can you please tell me if you find any problem in my pin configuration or my code. thanks
This is my pin configuration: stm32 3v pin ---------> hc-05 vcc and key pin stm32 tx --------------> hc-05 rx pin hc-05 tx ---------------> USB serial rx pin (to check the response on serial monitor) this is the code that i'm using: #include ''stm32f4xx.h'' #include ''stm32f4xx_gpio.h'' #include ''stm32f4xx_rcc.h'' #include ''stm32f4xx_usart.h'' #include <string.h> #include <stdio.h> GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; void USART_put(USART_TypeDef* USARTx, volatile char *s){ while(*s){ // wait until data register is empty while( !(USARTx->SR & 0x00000040) ); USART_SendData(USARTx, *s); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { } *s++; } void GPIO_USART_Configuration(void){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); /* Configure USART Tx as alternate function */ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Connect PXx to USARTx_Tx*/ GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3); } void USART3_Configuration(void) { USART_InitStructure.USART_BaudRate = 38400; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx; USART_Init(USART3, &USART_InitStructure); USART_Cmd(USART3, ENABLE); // enable USART2 } void usart_inisialisasi() { GPIO_USART_Configuration(); USART3_Configuration(); } int main(void) { usart_inisialisasi(); while(1) { USART_put(USART3, ''AT\r\n''); delay(2000); } }2014-03-17 09:52 AM
What type of USB-to-Serial? None of the voltages here will be RS232 compatible.
If you look at the STM32 TX side, can you see the AT characters? Why spin on TC bit? And why on USART1? Why *s++, wouldn't s++ suffice?2014-03-17 12:40 PM
I don't know the type of the usb serial cause i just borrowed it from the lab. But i don't think the voltage level is the problem cause i already tried usart comunication between the stm32 to usb serial (i can see the AT characters) and usb serial to hc-05 (i tried sending the at command using the serial monitor and it works cause i'm getting an OK response).
As for the usart1, sorry it's my mistake, this is from my recent project that using 2 usart communication, but i already erase it in my code. I change the *s++ to s++ but it does no change..2014-03-17 12:50 PM
thanks clive for your help. i still don't understand why but i need to plug the usb serial after i plug the stm32f4discovery supply cable first. If i tried to do the other way around, i will not getting any response. Can you tell me the reason?
2014-03-17 02:58 PM
Hello Fitdra,
the hc-05 is uart level. If you do a ''AT+VERSION'' is it the bolutek or linvor firmware ? Or something else? You have already used it with a usb<->Uart module right ? This will confirm the baud etc. Some of these modules like /n and some like /r/n. You say your code is already working, but use it to connect to your usb through putty and save a log of the output, then open that in n++ and set view->show all symbols and ensure all the chars are getting across correctly. Some of these modules have to go into ''command mode'' etc. Let me know your experience with your hc-05 and your usb /terminal input and we will go from there.2014-03-17 04:30 PM
Thank you for the response mccarty,
I haven't tried to connect my usb through putty cause i never use it. but maybe i will try it later. I tried sending the at+version and this is the response i get :+VERSION:2.0-20100601 I don't know about the firmware but it's not linvor (usually for slave only device and HC-05 is master/slave device). I looked at the datasheet, it says the device has HC-05 firmware. The baud rate is configured using the command mode. I follow all the step to make it into command mode (set the key pin high) and i'm using the default baud rate 38400 (i already checked it like you told me). From the datasheet, i need to send CR and LF (/r/n) after each command.2014-03-17 04:49 PM
Now i get a new problem.
I actually need to plug and unplug my usb serial from my PC a few times (usually 2-5 times) to get a response from the bluetooth module. why is that?2014-03-17 05:29 PM
Well if you soldered to the board instead of using the breakout board (
) you might be having all kinds of issues. I remember some of these modules will get ruined if you use 5v. I hope you have more than one module, I've got a stack of burnt up hc-05's. If you let me know what you are trying to do I might be able to suggest a better solution. These modules are cheap but they all come with different firmware with different bugs and quirks, and its hard to find modules with the same firmware once you have figured them out. I have also had issues with my usb<->uart devices. Sometimes they will not work again till I restart my computer. Unplugging them does not remove them from device manager. Try unplugging usb stuff from your computer, or use a powered usb hub, or alternate power for the hc- I stopped using the power from usb to uart for this reason. I dont think I've worked with that firmware. Think about it this way. If you send with your computer and it works, then you send the same thing with stm32 and it does not work then maybe stm32 is not outputting correctly. But you say you connected stm32 to your computer and you see the expected output ? So if your stm and your computer are feeding the same thing into the bluetooth module why do you not see the same results ? Another thing you can do is plug the RX line of your usb<->uart device into the tx line of the hc- this way you have two devices listening, then if the hc05 is outputting something you will see it. Do not plug two TX lines together though. I''m debugging with a wifi module right now and this is how I do it STM32 TX ---- > RX HC05 STM32 RX -----> TX HC05 |........... RX USB module So it works like a splitter. Use the RX of your usb module to listen on either end and see if that helps you debug. This is the code I use to send out data/**
* @brief
* sends buffer out without dma using polling
*
* @note
* @param buffer buffer to send data from
* @param size the size of the buffer, must not be greater than the buffer!
* @retval none
*/
void sendBuffer(u8* buffer, int size)
{
int i=0;
// todo convert size to ascii
for(i=0; i<size; i++)
{
// wait for it to go out
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, buffer[i]);
}
}
2014-03-18 07:47 AM
Hallo mccarty,
I think you are right. I used the board that was soldered by myself. I just bought a new HC-05 with the breakout board and i don't have any problem configuring the at command at all for now. Thank you very much for the help.2014-03-18 02:37 PM
''I just bought a new HC-05 with the breakout board and i don't have any problem configuring the at command at all for now''
Perhaps, in messing about with loads of commands, you managed to accidentally configure your old unit into an unusable state?Check the documentation for how to reset everyting to factory defaults...