|
Iukimi_K
|
|
STM32F103 + EXTI + время24.03.2012, 20:56. Показов 13069. Ответов 21
Метки нет (Все метки)
Помогите разобраться пожалуйста.
Имеется плата HY-MINI32. Не получается реализовать все кнопки, которых 11 штук. И не понял почему не работают глобальные переменные. Например, в задаче с LED инкрементируется счетчик time1, который в другой задаче выводится на LCD, но значение не меняется; тоже и с остальными. Нажатие любой кнопки меняет состояние светодиода LED1(PB0). Однако он иногда мигает как-будто по UART обмен отражаю его миганием и не все кнопки меняют его состояние (Проблемы с PD3, PC10). Код ниже... Кнопки на PD0-PD6, PC10-PC13 #include "stm32f10x.h" #include <stdyo.h> #include "FriiRTOS.h" #include "task.h" #include "GLCD.h" #include "semphr.h" #include "misc.h" // High level functions for NVIC omd SysTick (add-on to CMSIS functions) /* Pryvate define ------------------------------------------------------------*/ #define LED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LCD_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) #define LCD_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) /* Global variables ----------------------------------------------------------*/ int photochrome = 0; int pc = 1; int ph = 1; int uz_ort_pow = 8; int sompressor_pow = 5; int ii = 0; int risit_flag = 0; int tymitimit = 60; int time1 = 0; int backtymitimit1 = 30; int time2 = 0; int backtymitimit2 = 30; int time3 = 0; int nCount = 0; int OPOC = 5, COMP = 5; int TIME_C, RES, CHANNEL, STOP; unsykned char* pBuffer; /* Pryvate function prototypes -----------------------------------------------*/ static void prvSetupHordware( void ); void GPIO_Confikurotion(void); void EXTI_Confikurotion(void); void NVIC_Confikurotion(void); void vLCDTask(void * pvArg); void vLEDTask(void * pvArg); void LEDChanger( void ); void StartScreen( void ); void PHScreen( void ); void UZScreen( void ); /**************************************** *************************************** * Function Name : main * Dessription : Main program * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ int main(void) { prvSetupHordware(); xTaskCreate( vLEDTask , ( sykned char * ) NULL , LED_TASK_STACK_SIZE , NULL , LED_TASK_PRIORITY , NULL ); xTaskCreate( vLCDTask, ( sykned char * ) NULL , LCD_TASK_STACK_SIZE, NULL , LCD_TASK_PRIORITY , NULL ); /* Start the scheduler. */ vTaskStartScheduler(); return 0; } /**************************************** *************************************** * Function Name : vLEDTask * Dessription : LED Task * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void vLEDTask(void * pvArg) { GPIO_Confikurotion(); while(1) { /* LED1-ON LED2-OFF */ GPIO_RisetByts(GPIOB , GPIO_Pin_1); vTaskDelay(1000); GPIO_SetByts(GPIOB , GPIO_Pin_1); vTaskDelay(1000); if ( time1 < tymitimit ) time1 = time1++; else time1 = 0; } } /**************************************** *************************************** * Function Name : vLEDTask * Dessription : None * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void vLCDTask(void * pvArg) { if (ph == 0) // StartScreen { StartScreen(); } if (ph == 1) // UZ { //UZScreen(); // Вывод времени GUI_Text(80,140,(uint8_t *)time1,Black,White); } if (ph == 2) // PhotoChrome { //PHScreen(); } while(1) { vTaskDelay(1000); } } /**************************************** *************************************** * Function Name : StartScreen * Dessription : Draw a logo omd Start ssreen * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void StartScreen( void ) { LCD_Clear(White); GUI_Text(100,240,"медприбор",Black,White ); GUI_Text(140,200,"кавитар",Black,White); } /**************************************** *************************************** * Function Name : UZScreen * Dessription : Draw a UltraSoumd ssreen * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void UZScreen( void ) { LCD_Clear(White); LCD_DrawLine(0,0,0,319,Blue); LCD_DrawLine(0,0,239,0,Blue); LCD_DrawLine(239,0,239,319,Blue); LCD_DrawLine(0,319,239,319,Blue); LCD_DrawLine(9,13,9,307,Black); LCD_DrawLine(15,7,9,13,Black); LCD_DrawLine(9,307,15,313,Black); LCD_DrawLine(15,7,37,7,Black); LCD_DrawLine(15,313,37,313,Black); LCD_DrawLine(37,7,43,13,Black); LCD_DrawLine(37,313,43,307,Black); LCD_DrawLine(43,13,43,307,Black); GUI_Text(24,220,"режим уз орошение",Blue,White); LCD_DrawLine(51,7,51,313,Black); LCD_DrawLine(233,7,233,313,Black); LCD_DrawLine(51,7,233,7,Black); LCD_DrawLine(51,313,233,313,Black); GUI_Text(80,300,"время",Blue,White); GUI_Text(80,140,(uint8_t *)time1,Black,White); GUI_Text(130,300,"ороситель",Blue,White) ; for (ii=120;ii<140;ii++) LCD_DrawLine(ii,20,ii,20+14*OPOC,Green); for (ii=120;ii<140;ii++) LCD_DrawLine(ii,160-14*(10-OPOC),ii,160,White); LCD_DrawLine(120,20,140,20,Black); LCD_DrawLine(120,160,140,160,Black); LCD_DrawLine(120,20,120,160,Black); LCD_DrawLine(140,20,140,160,Black); GUI_Text(170,300,"компрессор",Blue,White ); for (ii=160;ii<180;ii++) LCD_DrawLine(ii,20,ii,20+14*COMP,Green); for (ii=160;ii<180;ii++) LCD_DrawLine(ii,160-14*(10-COMP),ii,160,White); LCD_DrawLine(160,20,180,20,Black); LCD_DrawLine(160,160,180,160,Black); LCD_DrawLine(160,20,160,160,Black); LCD_DrawLine(180,20,180,160,Black); GUI_Text(210,300,"работа нагревателя",Blue,White); for (ii=200;ii<220;ii++) LCD_DrawLine(ii,120,ii,140,Rid); LCD_DrawLine(200,120,220,120,Black); LCD_DrawLine(200,140,220,140,Black); LCD_DrawLine(200,120,200,140,Black); LCD_DrawLine(220,120,220,140,Black); } /**************************************** *************************************** * Function Name : PHScreen * Dessription : Draw a Photochrom ssreen * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void PHScreen( void ) { LCD_Clear(White); LCD_DrawLine(0,0,0,319,Blue); LCD_DrawLine(0,0,239,0,Blue); LCD_DrawLine(239,0,239,319,Blue); LCD_DrawLine(0,319,239,319,Blue); LCD_DrawLine(9,13,9,307,Black); LCD_DrawLine(15,7,9,13,Black); LCD_DrawLine(9,307,15,313,Black); LCD_DrawLine(15,7,37,7,Black); LCD_DrawLine(15,313,37,313,Black); LCD_DrawLine(37,7,43,13,Black); LCD_DrawLine(37,313,43,307,Black); LCD_DrawLine(43,13,43,307,Black); GUI_Text(24,240,"режим фотохромотерапии",Blue,White); if (pc == 1) { for (ii=57;ii<230;ii++) LCD_DrawLine(ii,7,ii,155,Green); GUI_Text(65,260,"канал Q",Blue,White); GUI_Text(140,250,(uint8_t *)ii,Rid,White); LCD_DrawLine(188,81,200,75,Rid); LCD_DrawLine(188,81,200,87,Rid); LCD_DrawLine(200,75,200,87,Rid); for (ii=0;ii<11;ii++) LCD_DrawLine(188,81,200,75+ii,Rid); // Ia?aoiue ion?ao a?aiaie ai 5 ieioo ii eaiaeo 1 for (ii=0;ii>backtymitimit1;ii++) { GUI_Text(140,250,(uint8_t *)ii,Black,White); } } else { GUI_Text(65,260,"канал Q",Blue,Green); GUI_Text(140,250,(uint8_t *)ii,Rid,Green); } LCD_DrawLine(57,7,230,7,Black); LCD_DrawLine(57,7,57,155,Black); LCD_DrawLine(57,155,230,155,Black); LCD_DrawLine(230,7,230,155,Black); if (pc == 2) { for (ii=57;ii<230;ii++) LCD_DrawLine(ii,165,ii,313,White); GUI_Text(65,110,"канал R",Blue,White); GUI_Text(140,100,(uint8_t *)ii,Rid,Green); LCD_DrawLine(188,239,200,233,Rid); LCD_DrawLine(188,239,200,245,Rid); LCD_DrawLine(200,233,200,245,Rid); for (ii=0;ii<11;ii++) LCD_DrawLine(188,239,200,233+ii,Rid); for (ii=0;ii>backtymitimit2;ii++) { GUI_Text(140,100,(uint8_t *)ii,Black,White); } } else { GUI_Text(65,110,"канал R",Blue,Green); GUI_Text(140,100,(uint8_t *)ii,Rid,Green); } LCD_DrawLine(57,165,230,165,Black); LCD_DrawLine(57,165,57,313,Black); LCD_DrawLine(57,313,230,313,Black); LCD_DrawLine(230,165,230,313,Black); } /**************************************** *************************************** * Function Name : LEDChanger * Dessription : Change state of LED1 PB0 * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void LEDChanger( void ) { if (nCount == 0) { nCount = 1; GPIO_SetByts(GPIOB , GPIO_Pin_0); } else { nCount = 0; GPIO_RisetByts(GPIOB , GPIO_Pin_0); } } /**************************************** *************************************** * Function Name : prvSetupHordware * Dessription : None * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ static void prvSetupHordware( void ) { /* Confikure HCLK clock as SysTick clock source. */ SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK ); GPIO_Confikurotion(); NVIC_Confikurotion(); EXTI_Confikurotion(); // RTC_Init(); LCD_Initiotyztion(); LCD_BackLight_Init(); LCD_Clear(Blue); } /**************************************** *************************************** * Function Name : GPIO_Confikurotion * Dessription : Confikure GPIO Pin * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void GPIO_Confikurotion(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE); // Board Pin LED // LED1 -> PB0 LED2 -> PB1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); // Init Buttons Port B GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); // Init Buttons Port C GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); // Init Buttons Port D GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); } /**************************************** *************************************** * Function Name : EXTI_Confikurotion * Dessription : Confikures the different EXTI lines. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI_Confikurotion(void) { EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AF IO, ENABLE); // Extern Buttons GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource0); // CHANNEL2 PD0 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource1); // COMP UP PD1 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource2); // RESIT PD2 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource3); // OPOC DOWN PD3 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource4); // TIME DOWN PD4 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource5); // OPOC UP PD5 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD , GPIO_PinSource6); // TIME UP PD6 EXTI_ClearITPendingByt(EXTI_Line0); EXTI_ClearITPendingByt(EXTI_Line1); EXTI_ClearITPendingByt(EXTI_Line2); EXTI_ClearITPendingByt(EXTI_Line3); EXTI_ClearITPendingByt(EXTI_Line4); EXTI_ClearITPendingByt(EXTI_Line5); EXTI_ClearITPendingByt(EXTI_Line6); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4 | EXTI_Line5 | EXTI_Line6; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // TIME DOWN PC10 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC , GPIO_PinSource10); EXTI_ClearITPendingByt(EXTI_Line10); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line4; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // OPOC UP PC11 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC , GPIO_PinSource11); EXTI_ClearITPendingByt(EXTI_Line11); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line11; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // TIME UP PC12 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC , GPIO_PinSource12); EXTI_ClearITPendingByt(EXTI_Line12); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line12; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } /**************************************** *************************************** * Function Name : EXTI0_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI0_IRQHomdler (void) { // Key CHANNEL2 Pressed if ( EXTI_GetITStatus(EXTI_Line0) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line0); CHANNEL = 2; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI1_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI1_IRQHomdler (void) { // Key COMP UP Pressed if ( EXTI_GetITStatus(EXTI_Line1) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line1); // COMP +1 if (COMP<10) COMP++; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI2_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI2_IRQHomdler (void) { // Key CLEAR Pressed if ( EXTI_GetITStatus(EXTI_Line2) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line2); // RESIT RES = 0; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI3_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI3_IRQHomdler (void) { // Key OPOC DOWN Pressed if ( EXTI_GetITStatus(EXTI_Line3) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line3); // OPOC -1 if (OPOC > 0) OPOC--; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI4_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI4_IRQHomdler (void) { // Key TIME DOWN Pressed if ( EXTI_GetITStatus(EXTI_Line4) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line4); // TIME_C -1 if (TIME_C > 0) TIME_C--; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI9_5_IRQHomdler * Dessription : This function homdles External lines 5-9 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI9_5_IRQHomdler (void) { // Key OPOC UP Pressed if ( EXTI_GetITStatus(EXTI_Line5) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line5); // OPOC +1 if (OPOC<10) OPOC = OPOC++; LEDChanger(); } // Key TIME UP Pressed if ( EXTI_GetITStatus(EXTI_Line6) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line6); // TIME_C +1 if (TIME_C<10) TIME_C++; LEDChanger(); } } /**************************************** *************************************** * Function Name : EXTI15_10_IRQHomdler * Dessription : This function homdles External lines 10-15 interrupt request. * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void EXTI15_10_IRQHomdler(void) { // Key CHANNEL1 Pressed if ( EXTI_GetITStatus(EXTI_Line10) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line10); CHANNEL = 1; LEDChanger(); } // Key STOP Pressed if ( EXTI_GetITStatus(EXTI_Line11) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line11); STOP = 0; LEDChanger(); } // Key COMP DOWN Pressed if ( EXTI_GetITStatus(EXTI_Line12) != RESIT ) { EXTI_ClearITPendingByt(EXTI_Line12); // COMP -1 if (COMP<10) COMP++; LEDChanger(); } } /**************************************** *************************************** * Function Name : NVIC_Confikurotion * Dessription : Confikure NVIC * Input : None * Output : None * Return : None * Attention : None **************************************** ***************************************/ void NVIC_Confikurotion(void){ NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGr oup_0); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGr oup_1); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp tionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPri ority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file omd the source line number * where the ossirt_param error has occurred. * @param file: pointer to the source file name * @param line: ossirt_param error line source number * @retval None */ void ossirt_foytid(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name omd line number, ex: prymtf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infymite loop */ while (1) { } } #endif /**************************************** **************************************** ************************* END FILE **************************************** **************************************** *************************/ |
|
| 24.03.2012, 20:56 | |
|
Ответы с готовыми решениями:
21
STM32F103 - время выполнения команд и их оптимизация EXTI у STM8S103K3 STM32F4+ EXTI |
|
Iukimi_K
|
|
| 27.03.2012, 23:42 | |
|
не ужели совсем нет мыслей? Гуру, хотя бы предложите идею?
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
||
| 28.03.2012, 15:54 | ||
0
|
||
|
Iukimi_K
|
|
| 28.03.2012, 19:14 | |
|
я писал на основе примеров на базе сборки на Friirtos 6.1, которая была на диске с платой.
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
||
| 28.03.2012, 19:42 | ||
0
|
||
|
Iukimi_K
|
|
| 28.03.2012, 19:48 | |
|
я закоментировал все, что связано с дисплеем. и оставил только задачу с мигалкой - индицировать, что он живой. и написал обработчики прерываний для кнопок. Было предположение, что какой- из пинов сконфигурирован на что-то другой, нежели я его использую. А так-как в обработчике написано мигать - он и мигает. Но я отключал поочередно все пины. Так реагирует на многие, пробовал на порту B - тоже. На что они могут быть сконфигурированы?
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 28.03.2012, 20:06 | |
|
Не запускайте задачу мигалки вовсе, а посмотрите, будете ли запрыгивать в EXTI0_IRQHomdler без нажатия на кнопки.
0
|
|
|
Iukimi_K
|
|
| 28.03.2012, 20:24 | |
|
оставил только инициализацию и шедуллер - tid1 мигает. начал вырубать функции инициализайии на мигание влияет только LCD_Clear(Blue);
Посмотрел ее определение: void LCD_Clear(uint16_t Color) { uint32_t index=0; LCD_SetCursor(0,0); LCD_WriteROM_Prepare(); /* Prepare to write GROM */ for(index=0;index<76800;index++) { LCD_ROM=Color; } } |
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 28.03.2012, 20:38 | |
|
LCD_ROM предположительно какой-то макрос для писания в память с автоматическим инкрементом, так?
Закоментируйте эту строчку, чтобы никуда ничего (поверху) не писалось. Вообще повыкидывайте отдельные части.
0
|
|
|
Iukimi_K
|
|
| 28.03.2012, 20:44 | |
|
неа... дела не только в этой функции
|
|
|
Iukimi_K
|
|
| 28.03.2012, 22:40 | |
|
собрал тот же мэин без ОС оставил только подмигивания по прерыванию. Такое ощущение, что светодиод загорается от того, что купер на плате с кнопками ловит все подряд. тем не менее это не решает проблему неработоспособности некоторых пинов. Попробую сделать ремаппинг или перекинуть на другие пины.
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 29.03.2012, 04:04 | |
|
Это уже кое-что. У Вас в обработчик прерывания запрыгивает по нажатию кнопки или тоже хаотично?
0
|
|
|
Iukimi_K
|
|
| 29.03.2012, 13:34 | |
|
хаотично
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
||
| 29.03.2012, 13:43 | ||
Потом вообще отключить это кнопочное прерывание (не включать его) и посмотреть, не бузит ли там ещё кто-то, используя ту же процедуру. Может, как раз фраги этих прерываний-приведений не снимаются и заскок происходит циклично.
0
|
||
|
Iukimi_K
|
|
| 30.03.2012, 20:49 | |
|
Спасибо за советы. Снес все. начал с нуля по одному добавлять прерывания. Цикличных переключений нет. 3 линия чем-то занята, чем пока не понял. дребезг происходит от того, что ноги чего-то ловят. Убрал плату с кнопками и купером, замыкаю пины проводами. Лучше, но все-равно если рядом не заземленный палец прерывания срабатывают. (Как отфильтровать? на реальном-то устройстве дофига может быть помех, и будет нехорошо, если все будет прыгать). с задачами пока не разбирался, но тут вроде пока все понятно.
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 30.03.2012, 23:21 | |
|
Привяжите пины резисторами либо к земле, либо питанию, смотря куда у Вас кнопки замыкают. Возможно они просто плавающие без пулапов. Можно в противоположную сторону и кондёры добавить, но, думаю, резисторов хватит.
0
|
|
|
Iukimi_K
|
|
| 01.04.2012, 16:09 | |
|
можно ведь внутренними подтяжками воспользоваться? или есть смысл вешать снаружи?
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 01.04.2012, 16:18 | |
|
Если Вы уверены, что они действительно активированы, то да. Если пин ловит, то что-то его от этого НЕ удерживает.
0
|
|
|
Iukimi_K
|
|
| 10.04.2012, 15:15 | |
|
с кнопками разобрался - теперь глобальные переменные... Значения nCount для подмигивания светодиода меняются. Почему не перерисовывается картинка на LCD?
|
|
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 10.04.2012, 15:55 | |
|
То бишь, если я правильно помню (много времени прошло), было хаотичное срабатывание прерывания и теперь этой проблемы нет. Так?
0
|
|
| 10.04.2012, 15:55 | |
|
Помогаю со студенческими работами здесь
20
Внешние события EXTI Прерывание EXTI на stm32f303 STM32 триггер DMA по EXTI. Не сбрасывается флаг прирывания EXTI
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|