23.02.2017, 19:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Странновато считает DWT,не сходится с SysTick. Может из-за делителя
SystemCoreClock/1000
циклов dwt=6501,хотя по логике 7200 должно быть
Код:
|
#define RTE_DEVICE_STDPERIPH_GPIO
#define RTE_DEVICE_STDPERIPH_RCC
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
uint16_t delay_count=0;
uint16_t flag_count=0;
uint16_t dwt=0;
void SysTick_Handler(void) // 1 ms
{
delay_count++;
if(delay_count==1000)
{
delay_count=0;
flag_count=1;
}
dwt=DWT_CYCCNT;
DWT_CYCCNT = 0;
}
int main()
{
GPIO_InitTypeDef GPIO_Init_Led;
//uint32_t i;
SCB_DEMCR |=CoreDebug_DEMCR_TRCENA_Msk; // DWT acsess
DWT_CYCCNT = 0;
DWT_CONTROL|= DWT_CTRL_CYCCNTENA_Msk; // enable count dwt
GPIO_Init_Led.GPIO_Pin=GPIO_Pin_13;
GPIO_Init_Led.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init_Led.GPIO_Speed=GPIO_Speed_10MHz;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE );
GPIO_Init(GPIOC,&GPIO_Init_Led);
SysTick_Config(SystemCoreClock/1000); //1 ms
//RCC-›APB2ENR|=RCC_APB2ENR_IOPCEN; // taktirovanie C
//GPIOC-›CRH=0x44344444; // PC13 output
DWT_CYCCNT = 0;
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
//GPIOC-›BSRR|=GPIO_BSRR_BR13;
while(!flag_count) ;
flag_count=0;
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
//GPIOC-›BSRR|=GPIO_BSRR_BS13;
//for(i=0; i‹4000000;i++){}
while(!flag_count) ;
flag_count=0;
}
} |
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 23.02.2017 в 19:17.
|
|
|
|
23.02.2017, 19:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Играя с делителем для SysTick
__________________
Глаза боятся,а руки делают.
|
|
|
|
23.02.2017, 19:46
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Keil uVision5 отладка
Когда что-то настраивается через SystemCoreClock/1000, надо вначале убедиться, что значение SystemCoreClock действительно равно частоте. Проверить это можно, найдя строчку uint32_t SystemCoreClock = .... ;. Либо, если в процессе работы мы меняем частоту (такое запросто может быть - управление энергосбережением), после смены частоты нужно запустить функцию SystemCoreClockUpdate(), в результате будет обновлено значение SystemCoreClock , и после этого перенастраиваются таймеры, у которых следует сохранять неизменную частоту счета.
Отследить текущее значение сисьтик-счетчика, глядя на регистры - нереально, он слишком быстро считает.
Лучше написать простейшую прогу типа
Код:
|
//---------------------------------
static volatile uint32_t TimingDelay;
void Delay_ms(uint32_t nTime)
{ // задержка на SysTicks
TimingDelay = nTime;
while (TimingDelay);
}
//---------------------------------
int main(void)
{
int errorstate;
SystemCoreClockUpdate(); // Запрос системной частоты
errorstate = SysTick_Config(SystemCoreClock/1000);
if (errorstate) { /* неправильно задан делитель */ }
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOIEN ;
GPIOI-›MODER |= GPIO_MODER_MODER1_0;
while (1)
{
LED_ON;
Delay_ms(500);
LED_OFF;
Delay_ms(500);
}
}
/*-------------------------
* Задержка на основе системного таймера
*/
void SysTick_Handler(void)
{
if (TimingDelay)
{
TimingDelay--; // декремент задержки
}
} |
Последний раз редактировалось NewWriter; 23.02.2017 в 19:54.
|
|
|
|
23.02.2017, 20:39
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от CERGEI1982
|
Странновато считает DWT,не сходится с SysTick.
|
Он не может странновато считать. Это счётчик циклов МК.
|
|
|
|
23.02.2017, 21:38
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 377
Сказал спасибо: 192
Сказали Спасибо 156 раз(а) в 99 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от CERGEI1982
|
Да и где посмотреть время между двумя Breakpoint ?
|
В осциллографе. Ногу в систике тогглим - и смотрим частоту.
|
|
|
|
24.02.2017, 05:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от krug_vv
|
В осциллографе. Ногу в систике тогглим - и смотрим частоту.
|
Попробовал,сходится все.
__________________
Глаза боятся,а руки делают.
|
|
|
|
24.02.2017, 05:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от NewWriter
|
Когда что-то настраивается через SystemCoreClock/1000, надо вначале убедиться, что значение SystemCoreClock действительно равно частоте. Проверить это можно, найдя строчку uint32_t SystemCoreClock = .... ;. Либо, если в процессе работы мы меняем частоту (такое запросто может быть - управление энергосбережением), после смены частоты нужно запустить функцию SystemCoreClockUpdate(), в результате будет обновлено значение SystemCoreClock , и после этого перенастраиваются таймеры, у которых следует сохранять неизменную частоту счета.
|
А как в кейле запустить логический анализатор для вывода или переменной? Нужен вывод SWO на отладчике ?
Программатор и отладчик у меня ST-LINK V2 с китая мини этот.
https://ru.aliexpress.com/item/ST-Li...b-e463f186bd0a
Код очень похож у вас на уроки в youtube https://www.youtube.com/watch?v=I92A...d37aVv0ic24jqV
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 24.02.2017 в 05:24.
|
|
|
|
25.02.2017, 18:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Вот еще как можно посмотреть какие тактовые частоты на шинах.
__________________
Глаза боятся,а руки делают.
|
|
|
|
26.02.2017, 00:40
|
|
Временная регистрация
Регистрация: 15.05.2010
Адрес: г. Липецк
Сообщений: 88
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 10 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от CERGEI1982
|
...Да и где посмотреть время между двумя Breakpoint ?
|
Как посмотреть время между двумя вызовами в Кейл? Нужно использовать возможности встроенного скриптового отладчика. Коротко тут.
Функция отладчика примерно такая:
Цитата:
|
FUNC void Counter (void) {
unsigned long int val;
val = states;
printf("States (dec) = %lu\n", val);
}
|
Она выводит в окно отладчика кол-во выполненных команд (тактов?) на момент вызова.
Последний раз редактировалось anakost; 26.02.2017 в 00:45.
|
|
|
|
07.03.2017, 12:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Keil uVision5 отладка
Сообщение от anakost
|
Как посмотреть время между двумя вызовами в Кейл? Нужно использовать возможности встроенного скриптового отладчика. Коротко тут.
Функция отладчика примерно такая:
Она выводит в окно отладчика кол-во выполненных команд (тактов?) на момент вызова.
|
Подключить не получается.
А вот время t0,t1,t2 снизу в углу почти что обозначает?
__________________
Глаза боятся,а руки делают.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:38.
|
|