망고 z1보드 컴파일러 설정 문제

CPU/STM32F103 2014. 5. 19. 00:33

이번엔 망고 z1으로 zigbee를 이용한 데모보드를 작업하게 되었다.

http://crztech.iptime.org:8080/Release/mango-Z1/src/ 여기서 소스다운로드


http://www.mangoboard.com/ 는 회로도


근디 시작부터 컴파일 에러..헉..... 고객님 당황하셨어요???


IAR 6.1까지는 괜찬은데..난 6.3 




요렇게..


결국 설정문제

1. option 에서 General Options -> Library Configuration 에 보면 전에 없던 CMSIS 체크부분이 있습니다 . 이부분을 체크

2. st제공 Libraries\CMSIS\Core\CM3에서 core_m3.c .h 인가 st 라이브러리에 있는 cmsis 파일 지우거나 해야됩니다


끝...




ADC Polling Mode 사용

CPU/STM32F103 2014. 4. 15. 13:19

이번엔adc를 폴링 모드로 사용해보자.

32F103C8T6 CPU의 PA0( ADC12_IN0 ) 포트로 전압을 읽어 보자

VREF는 핀수가 많은 칩은 VREF핀이 따로 나오지만 C8칩은 VDDA , VSSA와 VREF가 내부적으로 연결 되어 있따.


설정은 다음과 같다.

1. GPIO 설정

2. CLOCK설정

3. ADC 설정


void ADC2_volt_Configuration(void)

{

  ADC_InitTypeDef ADC_InitStructure;

  GPIO_InitTypeDef GPIO_InitStructure;

  

  //====================================

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  

  /* Enable ADC2 and GPIOC clock */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE);

  

  /* ADC2 configuration ------------------------------------------------------*/

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

  ADC_InitStructure.ADC_ScanConvMode = DISABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;

  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfChannel = 1;

  ADC_Init(ADC2, &ADC_InitStructure);


  /* ADC2 regular channel12 configuration */ 

  ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5);


  /* Enable ADC2 */

  ADC_Cmd(ADC2, ENABLE);

  

  /* Enable ADC2 reset calibaration register */   

  ADC_ResetCalibration(ADC2);

  /* Check the end of ADC21 reset calibration register */

  while(ADC_GetResetCalibrationStatus(ADC2));


  /* Start ADC2 calibaration */

  ADC_StartCalibration(ADC2);

  /* Check the end of ADC1 calibration */

  while(ADC_GetCalibrationStatus(ADC2));


}


사용법은 요렇게. VDDA가 3.3V


uint16_t ADC2_vold_Read(void)

{

  uint16_t AD_value;


  ADC_SoftwareStartConvCmd(ADC2, ENABLE);

  //wait for conversion complete

  while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC)){}

  //read ADC value

  AD_value=ADC_GetConversionValue(ADC2);

  //clear EOC flag

  ADC_ClearFlag(ADC2, ADC_FLAG_EOC);


  return AD_value;

}


REMAP 기능 ( PB4 핀 GPIO사용위함)

CPU/STM32F103 2014. 4. 13. 23:28

이번에는 REMAP를 해보겠습니다.

왜 하냐??? PB4핀이 움직이지 않아서 확인 해보았더니...JTAG기능으로 우선되어 있더군요.

NJTRST로 되어 있는 것을 PB4로 사용하기 위해서는 REMAP를 해주어야 합니다.


 MCU_GPIO_Configuration();

  

  /* Configure PC13.PA11 in interrupt mode */

  EXTI15_10_Config();

  

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);      // it's for PB4 PIN( org is NJTRST pin) , it have to locate last after gpio config.


순서는 GPIO를 초기화 후 마지막에 해주어야 됩니다. 먼저 해주니 움직이지 않는 군요.


경우엔 따라서 JTAG전체 핀을 사용해야 되는 경우도 생기겠죠?

그럴때 아래와 같이

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable      , ENABLE);

요렇게 하거나 아래의 것을 참보하여 하면 됩니다.

#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */

#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */

#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */


아래 디볼트 세팅에 관한 부분입니다. PB4가 기본 JNTRST고 리멥하면 PB4로 쓸수 있는 구조네요...

잘 만들었네요...



그럼