2020-12-25 04:08 AM
Helleo,
I am newbie in Touchgfx and I try developing first project.
I am willing to data transfer stm32746 to pc via usart and control pins.
When I click the button stm doesnt send data via usart or stm doesnt control pins.
Screen1View.cpp codes:
#include <gui/screen1_screen/Screen1View.hpp>
#include "stm32f7xx_hal.h"
extern UART_HandleTypeDef huart2;
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::led_on()
{
/* HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_2|GPIO_PIN_5
|GPIO_PIN_3, GPIO_PIN_SET);
*/
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_5);
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_6);
// textArea1.setVisible(true);
char com_cevap[12] ="adc_veri\r\n ";
HAL_UART_Transmit(&huart2, (uint8_t *) &com_cevap, 12, 200);
btndurum.setAlpha(254);
btndurum.invalidate();
}
void Screen1View::led_off()
{
/* HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_2|GPIO_PIN_5
|GPIO_PIN_3, GPIO_PIN_RESET);
*/
//HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_RESET);
//HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_RESET);
btndurum.setAlpha(50);
btndurum.invalidate();
}
please tell me whats wrong? Could i control pins or data transfer in button click?
I use STMCubeIDe 1.5.1, Visual Studio 2019 and last framework.TouchGfx 4.15
Solved! Go to Solution.
2021-01-03 11:11 AM
DISCO-F746NG | Mbed read image with pinout description
2020-12-27 10:05 AM
You need debug your code, because from your info we cant help.
Yes you can control activated GPIO , or use quick transfers. For slow is better use IT DMA or next thread in RTOS.
2020-12-30 09:01 AM
2020-12-30 09:13 AM
You missunderstand me , Debug folder, that you zip is totaly unusable for help you.
2020-12-30 09:55 AM
2020-12-30 11:35 AM
Try this in your main.c
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
char giden[10]="";
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
....
....
void StartTaskUart(void const * argument)
{
/* USER CODE BEGIN StartTaskUart */
/* Infinite loop */
for(;;)
{
if(giden[0]!=0) {
HAL_UART_Transmit(&huart2, (uint8_t *)giden,10,30);
giden[0]=0;
}
osDelay(10);
}
/* USER CODE END StartTaskUart */
}
and screenview.cpp
#include <gui/screen1_screen/Screen1View.hpp>
#include "stm32f7xx_hal.h"
#include "string.h"
extern char giden[];
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::veri_gonder()
{
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_5);
//HAL_Delay(200); ??? DONT USE DELAYS IN GUI !!!
strcpy(giden, "start\n\r"); // checked in thread and send
}
void Screen1View::veri_stop()
{
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_6);
// HAL_Delay(200);
// char giden[10]="stop\n\r";
if(giden[0]==0) strcpy(giden, "stop\n\r");
}
2020-12-30 11:40 AM
When include some C headers in Cpp, put them inside external C. like this:
#include <gui/screen1_screen/Screen1View.hpp>
extern "C"
{
#include "stm32f7xx_hal.h"
#include "cmsis_os.h"
#include "UART.h" // put huart2 here
}
...
Then debug it, make sure HAL_UART_Transmit in your button callback is being called.
2020-12-30 11:56 AM
And for you see interactions example :
#include <gui/screen1_screen/Screen1View.hpp>
#include <touchgfx/Color.hpp>
//#include "stm32f7xx_hal.h"
#include "string.h"
extern char giden[];
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::veri_gonder()
{
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_5);
strcpy(giden, "start\n\r"); // checked in thread and send
btnGonder.setLabelColor(touchgfx::Color::getColorFrom24BitRGB(0, 255, 255));
}
void Screen1View::veri_stop()
{
//HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_6);
if(giden[0]==0) strcpy(giden, "stop\n\r");
btnGonder.setLabelColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
btnGonder.invalidate();
}
2020-12-30 12:04 PM
Yes and when you try call it directly include extern, not create new.
UART_HandleTypeDef huart2; is new empty handle
instead use
extern UART_HandleTypeDef huart2;
or with extern "C" as writed zzzzz
2021-01-03 03:15 AM
Hello
Thank you for replies.
I created new project and added two button with two interaction.
I set uart2 D5 and D6 pins.115200 baud and polling connecting not IT or DMA.
I coded like you but same result . i cant send data from stm32746 to pc via uart.
main.c
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
char giden[10] = "adbcde\r\n";
/* USER CODE END 0 */
static void MX_USART2_UART_Init(void)
{
/* USER CODE BEGIN USART2_Init 0 */
/* USER CODE END USART2_Init 0 */
/* USER CODE BEGIN USART2_Init 1 */
/* USER CODE END USART2_Init 1 */
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
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;
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART2_Init 2 */
/* USER CODE END USART2_Init 2 */
}
uart task i created in main.c
/* USER CODE END Header_StartTask_Uart */
void StartTask_Uart(void const * argument)
{
/* USER CODE BEGIN StartTask_Uart */
/* Infinite loop */
for(;;)
{
if (giden[0] != 0) {//icinde deger varsa
HAL_UART_Transmit(&huart2, (uint8_t *)giden, 10 ,30);
giden[0] = 0;
}
osDelay(1000);
}
/* USER CODE END StartTask_Uart */
}
screen1view.cpp
#include <gui/screen1_screen/Screen1View.hpp>
/*
extern "C"
{
#include "stm32f7xx_hal.h"
#include "cmsis_os.h"
UART_HandleTypeDef huart2;
}
*/
#include "string.h"
extern char giden[];
Screen1View::Screen1View()
{
}
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
}
void Screen1View::tearDownScreen()
{
Screen1ViewBase::tearDownScreen();
}
void Screen1View::basla()
{
strcpy(giden, "basla\n\r");
btnBasla.invalidate();
}
void Screen1View::bitir()
{
if (giden[0] == 0) {
strcpy(giden, "durdu\n\r");
}
btn_bitir.invalidate();
}