相关文章推荐
Posted on January 21, 2015 at 00:27

I read absolutely all the posts in this forum plus some other posts online and I can't still make this work with IAR and the Terminal I/O screen.

I can however make it work using the ST-Link Utility and the Printf via SWO. But I can't have both running at the same time and I would like to debug completely with IAR. SWO Config on debug screen:
  • SWO Configuration CPU Clock set to: 144 MHz (the one that works with St-link utility)
  • ITM Stimulus Ports all the 0 ports checked.
  • SWO Clock: Autodetect.
General Options > Library Configuration:
  • Library: Full
  • Semihosted
  • stdout/stderr Via SWO
ST-LINK option in IAR:
  • Interface: SWD
  • CPU Clock: 144MHz
  • SWO Clock: Auto (2000Khz same as St-link utility)
And the code to summarize what I added:

#include ''stdio.h''
static
TextOut(
const
*str);
main(
TextOut(
''It works!''
TextOut(
const
*str)
(*str==
) ITM_SendChar(
ITM_SendChar(*str);
while
(*str++);
  This works perfectly in ST-Link Utility, and I can read the ''It works!''. 
  But if I debug it with IAR it gets stuck inside 
  core_cm4.h: 
__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)
((ITM->TCR & ITM_TCR_ITMENA_Msk) && 
/* ITM enabled */
(ITM->TER & (1UL << 0) ) ) 
/* ITM Port #0 enabled */
while
(ITM->PORT[0].u32 == 0);
ITM->PORT[0].u8 = (uint8_t) ch;
return
(ch);
  It gets stuck on line 6: 
  
while
(ITM->PORT[0].u32 == 0);
And nothing shows up in the Terminal I/O screen. Any ideas why is this happening? And why the exact same code would work on ST-Link Utility? Thanks Posted on January 21, 2015 at 02:17

Try the Debug_ITMDebugEnable() function from here, different debuggers may configure the CPU in slightly different ways. Print out the debug/itm registers if you want to see the differences.

printf(''%08X %08X %08X\n'',*SCB_DEMCR,*ITM_TCR,*ITM_TER);

[DEAD LINK /public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/STM32Discovery/Programmable%20CRC%20peripheral%20in%20newer%20STM32%20devices&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=166]https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Discovery%2FProgrammable%20CRC%20peripheral%20in%20newer%20STM32%20devices&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F¤tviews=166

Posted on January 21, 2015 at 17:32

Thank you Clivel.

The main reason I was trying to send messages directly through ITM is because printf() wasn't working at all.

But it looks like I messed around with some other settings from IAR, after I tried with a new project I could use printf() and get the messages without problems. So I am using that right now.

Thanks, I might need to use a CRC peripheral in the near future.

 
推荐文章