├── ADS1220.c ├── ADS1220.h ├── LICENSE ├── PCB1_Pt100.PcbDoc ├── PCB2_Pt100.PcbDoc ├── PCB_Project.PrjPcb ├── Project_Documentation.pdf ├── README.md ├── Sheet1_Pt100.SchDoc ├── i2c-lcd.c ├── i2c-lcd.h ├── main _UART.c ├── main.c ├── stm32f1xx_hal_msp.c ├── stm32f1xx_it.c └── system_stm32f1xx.c /ADS1220.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | /************************************************************************************ 4 | * File Name : ADS1220.c * 5 | * Author : SAAD IDRISSI * 6 | * Designation : Electronic Engineer * 7 | * Version : 1.0 * 8 | * Description : Bare metal driver to implement for ADS1220 Using SPI Communication. * 9 | * Target : stm32f103 microcontroller 10 | * Processor : ARM-Cortex M3 11 | * IDE : Keil Uvision 12 | */ 13 | 14 | 15 | #include "stm32f10x.h" // Device header 16 | #include "ADS1220.h" 17 | #include "stdint.h" 18 | #include 19 | 20 | /* 21 | Pins configuration 22 | 23 | SPI_CLK -> PA5 (AF) 24 | SPI_MISO -> PA6 (AF) 25 | SPI_MOSI -> PA7 (AF) 26 | SPI_CS -> PA4 (GPIO) 27 | 28 | */ 29 | 30 | void GPIO_Init(void) // set gpios for ADS1220 and stm32 I/O 31 | 32 | { 33 | 34 | // We are using PortA and PortC for SPI1 communication, first we should enbale clock for those ports 35 | RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; 36 | RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; 37 | 38 | } 39 | /* 40 | void USART2_Init(void){ 41 | 42 | RCC->APB1ENR |= RCC_APB1ENR_USART2EN; 43 | RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; 44 | GPIOA->CRL &=~ GPIO_CRL_CNF2_0; 45 | GPIOA->CRL |= GPIO_CRL_CNF2_1; 46 | GPIOA->CRL |= (GPIO_CRL_MODE2_1 | GPIO_CRL_MODE2_0); 47 | 48 | USART2->BRR = 0XEA6; 49 | 50 | USART2->CR1 |= USART_CR1_UE; 51 | USART2->CR1 |= USART_CR1_TE; 52 | USART2->CR1 |= USART_CR1_RE ; 53 | }*/ 54 | 55 | 56 | void USART2_Init(void){ 57 | 58 | RCC->APB2ENR |= RCC_APB2ENR_USART1EN; 59 | RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; 60 | GPIOA->CRH &=~ GPIO_CRH_CNF9_0; 61 | GPIOA->CRH |= GPIO_CRH_CNF9_1; 62 | GPIOA->CRH |= (GPIO_CRH_MODE9_1 | GPIO_CRH_MODE9_0); 63 | 64 | USART1->BRR = 0XEA6; 65 | 66 | USART1->CR1 |= USART_CR1_UE; 67 | USART1->CR1 |= USART_CR1_TE; 68 | USART1->CR1 |= USART_CR1_RE ; 69 | 70 | } 71 | 72 | void USART_write( int ch){ 73 | 74 | while(!(USART1->SR & USART_SR_TXE)){} // we check if the transmit buffer is empty before sending the data 75 | 76 | USART1->DR = (ch); // contains the received or transmitted data 77 | //we put the data which we will send in DR register of the microcontroller 78 | } 79 | 80 | 81 | void SPI1_init(void){ 82 | 83 | GPIOA->CRL |= GPIO_CRL_MODE4_0 ; 84 | GPIOA->CRL |= GPIO_CRL_MODE4_1; 85 | GPIOA->CRL &=~ GPIO_CRL_CNF4_0; 86 | GPIOA->CRL &=~ GPIO_CRL_CNF4_1; 87 | 88 | //GPIOA->BSRR = GPIO_BSRR_BS4; // Set idle state as high 89 | 90 | //In sofwtare NSS , PA4 could be used as GPIO 91 | 92 | // PA5-->SCK as Master AF push-pull 93 | 94 | GPIOA->CRL |= GPIO_CRL_MODE5_0 ; 95 | GPIOA->CRL |= GPIO_CRL_MODE5_1; 96 | GPIOA->CRL &=~ GPIO_CRL_CNF5_0; 97 | GPIOA->CRL |= GPIO_CRL_CNF5_1; 98 | 99 | // PA6-->MISO as Full-Duplex MASTER -->Input pull up 100 | GPIOA->CRL &=~ GPIO_CRL_MODE6_0 ; 101 | GPIOA->CRL &=~ GPIO_CRL_MODE6_1; 102 | GPIOA->CRL &=~ GPIO_CRL_CNF6_0; 103 | GPIOA->CRL |= GPIO_CRL_CNF6_1; 104 | 105 | // PA7-->MOSI as Full-Duplex MASTER -->AF push-pull 106 | GPIOA->CRL |= GPIO_CRL_MODE7_0 ; 107 | GPIOA->CRL |= GPIO_CRL_MODE7_1; 108 | GPIOA->CRL &=~ GPIO_CRL_CNF7_0; 109 | GPIOA->CRL |= GPIO_CRL_CNF7_1; 110 | 111 | 112 | // Enable SPI1 clock 113 | RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; 114 | 115 | 116 | // set RXONLY to 0 to select Full-Duplex Mode 117 | SPI1->CR1 &=~SPI_CR1_RXONLY ; 118 | 119 | //2 : Configure SPI1 P707-743 120 | //--------------------------- 121 | SPI1->CR1 &=~SPI_CR1_BIDIMODE; // Use 2 lines Full duplex 122 | 123 | SPI1->CR1 &=~ SPI_CR1_DFF; // 8 bits Data Frame Format p742 124 | SPI1->CR1 &=~ SPI_CR1_LSBFIRST; // MSB first 125 | 126 | // Clock Phase 127 | SPI1->CR1 &=~ SPI_CR1_CPOL; // Set clock Plority 128 | SPI1->CR1 |= SPI_CR1_CPHA; // set Clock Phase 129 | 130 | // Baud rate control 131 | SPI1->CR1 |= SPI_CR1_BR_2 ; // Fpclk=72Mhz/32 = 2.25 Mhz 132 | SPI1->CR1 &=~ SPI_CR1_BR_1|SPI_CR1_BR_0 ; 133 | 134 | 135 | //Software slave select --> In sofwtare NSS , PA4 could be used as GPIO 136 | // Set as master (SSI must be high), with software managed NSS 137 | SPI1->CR1 |= SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM; 138 | 139 | SPI1->CR1 |= SPI_CR1_SPE ; // Enable SPI1 peripheral 140 | } 141 | 142 | 143 | void DelayTimerUs(int n){ 144 | // 1 Mhz ---> 1Us 145 | //ARR = n (n=1 --> 1us) (n=2 --> 2us) .... 146 | 147 | RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; 148 | TIM2->PSC = 36; 149 | TIM2->ARR = (n&0xFF); 150 | TIM2->CNT = 0; 151 | TIM2->CR1 = TIM_CR1_CEN; 152 | 153 | for( int i =0; iSR & (1<<0))) {} 156 | } 157 | TIM2->SR &=~ (1<<0); 158 | 159 | TIM2->CR1 &=~ TIM_CR1_CEN; 160 | } 161 | 162 | unsigned char SPI_Write(unsigned char data){ 163 | 164 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 165 | DelayTimerUs(5); 166 | while(!(SPI1->SR & SPI_SR_TXE)) {} 167 | 168 | *(__IO uint8_t *)&SPI1->DR = data; 169 | 170 | return data; 171 | } 172 | 173 | 174 | void SPI_Send(unsigned char byte){ 175 | 176 | SPI_Write(byte); 177 | 178 | } 179 | 180 | 181 | 182 | unsigned char SPI_Receive(void){ 183 | 184 | unsigned char Result ; 185 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 186 | 187 | Result = SPI_Write(0xFF); 188 | 189 | while ((SPI1->SR & SPI_SR_RXNE)!= SPI_SR_RXNE){} 190 | 191 | // Result = SPI_Write(0xFF); 192 | 193 | Result = *(__IO uint8_t *)&SPI1->DR; 194 | 195 | return Result; 196 | 197 | } 198 | 199 | void Write_Register(unsigned char addr, unsigned char data){ 200 | 201 | //GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 202 | DelayTimerUs(5); 203 | SPI_Send(WREG|addr<<2); 204 | DelayTimerUs(5); 205 | SPI_Send(data); 206 | DelayTimerUs(5); 207 | 208 | } 209 | 210 | unsigned char Read_register( unsigned char addr){ 211 | 212 | unsigned char Register_Value ; 213 | 214 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 215 | DelayTimerUs(5); 216 | 217 | SPI_Send(RREG|addr<<2); 218 | DelayTimerUs(5); 219 | //Register_Value = SPI_Send_Receive(0xFF); 220 | Register_Value = SPI_Receive(); 221 | Register_Value = SPI_Receive(); 222 | //DelayTimerUs(10); 223 | return Register_Value; 224 | 225 | } 226 | 227 | void ADS_Init(){ 228 | 229 | DelayTimerUs(50); // wait 50us 230 | SPI1_init(); 231 | // pin_config(); // set drdy as falling edge triggered Interrupt 232 | 233 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 234 | 235 | 236 | DelayTimerUs(1); // wait 60ns 237 | SPI_Send(RESET); 238 | DelayTimerUs(51); // wait 50us+(32*t(clk)); tclk = (1/2,25) Mhz 239 | //DelayTimerUs(60); 240 | 241 | } 242 | 243 | 244 | int32_t Read_ADC (void){ 245 | 246 | 247 | int32_t mResult32 = 0; 248 | long int bit24=0; 249 | 250 | SPI_Send(RDATA); 251 | 252 | #ifdef ADS1220 253 | bit24 = SPI_Receive(); // retrieve the first 8 bits data 254 | bit24 = SPI_Receive(); 255 | bit24 = (bit24<<8); // schift this 8 bit left 8 position 256 | bit24 = SPI_Receive(); // retrieve the second 8 bits data 257 | bit24 = SPI_Receive(); 258 | 259 | if (bit24 & 0x8000) 260 | bit24 |= 0xffff0000; 261 | #else 262 | bit24 = SPI_Receive(); 263 | bit24 = SPI_Receive(); 264 | 265 | bit24 = (bit24 << 8) | SPI_Receive(); 266 | bit24 = (bit24 << 8) | SPI_Receive(); 267 | 268 | 269 | /* sign extend data */ 270 | if (bit24 & 0x800000) 271 | bit24 |= 0xff000000; 272 | 273 | 274 | #endif 275 | 276 | mResult32 = bit24; // mResult32 = bi24 - Offset 277 | 278 | return mResult32; 279 | 280 | //wait_us(0.02); 281 | 282 | } 283 | 284 | float CodeToRtd(int32_t code){ 285 | 286 | volatile float RTD; 287 | 288 | RTD = ((code*3240.0*2.0)/(16*8388607.0)); 289 | 290 | return RTD; 291 | 292 | 293 | } 294 | 295 | 296 | float RtdToTemperature(float rtd){ 297 | 298 | // float coeff = 0.00385; 299 | 300 | volatile float temperature; 301 | // temperature = (int)(((rtd/100)-1)/coeff); 302 | 303 | temperature = (-A + sqrt ((A*A) - (4*B*(1-(rtd/R100)))))/(2*B); 304 | 305 | 306 | return temperature; 307 | } 308 | 309 | 310 | 311 | -------------------------------------------------------------------------------- /ADS1220.h: -------------------------------------------------------------------------------- 1 | 2 | /************************************************************************************ 3 | * File Name : ADS1220.h * 4 | * Author : SAAD IDRISSI * 5 | * Designation : Electronic Engineer * 6 | * Version : 1.0 * 7 | * Description : Bare metal driver to implement for ADS1220 Using SPI Communication. * 8 | * Target : stm32f103 microcontroller 9 | * Processor : ARM-Cortex M3 10 | * IDE : Keil Uvision 11 | */ 12 | 13 | 14 | 15 | 16 | #ifndef ADS1220_H_ 17 | #define ADS1220_H_ 18 | 19 | /* Definition of GPIO stm32 Port Bits Used for Communication */ 20 | 21 | /* PA4 */ 22 | #define ADS1220_CS 0x10 //(1<<4) localisation of pin 4 Port A 0x10 23 | /* PA7 */ 24 | #define ADS1220_DIN 0x80 //(1<<7) localisation of pin 7 port A 25 | /* PA6 */ 26 | #define ADS1220_DOUT 0x40 //(1<<6) localisation of pin 6 port A 0x40 27 | /* PC7 */ 28 | #define ADS1220_DRDY 0x80 //(1<<7) localisation of pin 7 port C 0x80 29 | /* PA5 */ 30 | #define ADS1220_SCLK 0x20 //(1<<5) localisation of pin 5 port A 0x20 31 | 32 | /* Error Return Values */ 33 | #define ADS1220_NO_ERROR 0 34 | #define ADS1220_ERROR -1 35 | 36 | 37 | // Regsiters ADDRESSES 38 | #define config_REG0_ADDR 0x00 39 | #define config_REG1_ADDR 0x01 40 | #define config_REG2_ADDR 0x02 41 | #define config_REG3_ADDR 0x03 42 | #define config_REG4_ADDR 0x03 43 | 44 | // COMMANDES ADDRESSES 45 | #define RDATA 0x10 46 | #define WREG 0x40 47 | #define RREG 0x20 48 | #define RESET 0x06 49 | #define START_SYNC 0x08 50 | #define SPI_MASTER_DUMMY 0xFF 51 | 52 | /* ADS1220 Register 0 Definition */ 53 | /* Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 54 | //-------------------------------------------------------------------------------------------- 55 | // MUX [3:0] | GAIN[2:0] | PGA_BYPASS 56 | */ 57 | /* Define MUX */ 58 | #define ADS1220_MUX_0_1 0x00 59 | #define ADS1220_MUX_0_2 0x10 60 | #define ADS1220_MUX_0_3 0x20 61 | #define ADS1220_MUX_1_2 0x30 62 | #define ADS1220_MUX_1_3 0x40 63 | #define ADS1220_MUX_2_3 0x50 64 | #define ADS1220_MUX_1_0 0x60 65 | #define ADS1220_MUX_3_2 0x70 66 | #define ADS1220_MUX_0_G 0x80 67 | #define ADS1220_MUX_1_G 0x90 68 | #define ADS1220_MUX_2_G 0xa0 69 | #define ADS1220_MUX_3_G 0xb0 70 | #define ADS1220_MUX_EX_VREF 0xc0 71 | #define ADS1220_MUX_AVDD 0xd0 72 | #define ADS1220_MUX_DIV2 0xe0 73 | /* Define GAIN */ 74 | #define ADS1220_GAIN_1 0x00 75 | #define ADS1220_GAIN_2 0x02 76 | #define ADS1220_GAIN_4 0x04 77 | #define ADS1220_GAIN_8 0x06 78 | #define ADS1220_GAIN_16 0x08 79 | #define ADS1220_GAIN_32 0x0a 80 | #define ADS1220_GAIN_64 0x0c 81 | #define ADS1220_GAIN_128 0x0e 82 | /* Define PGA_BYPASS */ 83 | #define ADS1220_PGA_BYPASS 0x01 84 | 85 | /* ADS1220 Register 1 Definition */ 86 | /* Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 87 | //-------------------------------------------------------------------------------------------- 88 | // DR[2:0] | MODE[1:0] | CM | TS | BCS 89 | */ 90 | /* Define DR (data rate) */ 91 | #define ADS1220_DR_20 0x00 92 | #define ADS1220_DR_45 0x20 93 | #define ADS1220_DR_90 0x40 94 | #define ADS1220_DR_175 0x60 95 | #define ADS1220_DR_330 0x80 96 | #define ADS1220_DR_600 0xa0 97 | #define ADS1220_DR_1000 0xc0 98 | 99 | /* Define MODE of Operation */ 100 | #define ADS1220_MODE_NORMAL 0x00 101 | #define ADS1220_MODE_DUTY 0x08 102 | #define ADS1220_MODE_TURBO 0x10 103 | #define ADS1220_MODE_DCT 0x18 104 | /* Define CM (conversion mode) */ 105 | #define ADS1220_CC 0x04 106 | /* Define TS (temperature sensor) */ 107 | #define ADS1220_TEMP_SENSOR 0x02 108 | /* Define BCS (burnout current source) */ 109 | #define ADS1220_BCS 0x01 110 | /* ADS1220 Register 2 Definition */ 111 | /* Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 112 | //-------------------------------------------------------------------------------------------- 113 | // VREF[1:0] | 50/60[1:0] | PSW | IDAC[2:0] 114 | */ 115 | /* Define VREF */ 116 | #define ADS1220_VREF_INT 0x00 117 | #define ADS1220_VREF_EX_DED 0x40 118 | #define ADS1220_VREF_EX_AIN 0x80 119 | #define ADS1220_VREF_SUPPLY 0xc0 120 | /* Define 50/60 (filter response) */ 121 | #define ADS1220_REJECT_OFF 0x00 122 | #define ADS1220_REJECT_BOTH 0x10 123 | #define ADS1220_REJECT_50 0x20 124 | #define ADS1220_REJECT_60 0x30 125 | /* Define PSW (low side power switch) */ 126 | #define ADS1220_PSW_SW 0x08 127 | /* Define IDAC (IDAC current) */ 128 | #define ADS1220_IDAC_OFF 0x00 129 | #define ADS1220_IDAC_10 0x01 130 | #define ADS1220_IDAC_50 0x02 131 | #define ADS1220_IDAC_100 0x03 132 | #define ADS1220_IDAC_250 0x04 133 | #define ADS1220_IDAC_500 0x05 134 | #define ADS1220_IDAC_1000 0x06 135 | #define ADS1220_IDAC_2000 0x07 136 | /* ADS1220 Register 3 Definition */ 137 | /* Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 138 | //-------------------------------------------------------------------------------------------- 139 | // I1MUX[2:0] | I2MUX[2:0] | DRDYM | RESERVED 140 | */ 141 | /* Define I1MUX (current routing) */ 142 | #define ADS1220_IDAC1_OFF 0x00 143 | #define ADS1220_IDAC1_AIN0 0x20 144 | #define ADS1220_IDAC1_AIN1 0x40 145 | #define ADS1220_IDAC1_AIN2 0x60 146 | #define ADS1220_IDAC1_AIN3 0x80 147 | #define ADS1220_IDAC1_REFP0 0xa0 148 | #define ADS1220_IDAC1_REFN0 0xc0 149 | /* Define I2MUX (current routing) */ 150 | #define ADS1220_IDAC2_OFF 0x00 151 | #define ADS1220_IDAC2_AIN0 0x04 152 | #define ADS1220_IDAC2_AIN1 0x08 153 | #define ADS1220_IDAC2_AIN2 0x0c 154 | #define ADS1220_IDAC2_AIN3 0x10 155 | #define ADS1220_IDAC2_REFP0 0x14 156 | #define ADS1220_IDAC2_REFN0 0x18 157 | /* define DRDYM (DOUT/DRDY behaviour) */ 158 | #define ADS1220_DRDY_MODE 0x02 159 | 160 | 161 | // RTD Coefficients 162 | 163 | #define A 0.00391 164 | #define B -0.000000578 165 | #define R100 100 166 | 167 | // Function declaration 168 | 169 | void GPIO_Init(void); 170 | void SPI1_init(void); 171 | void USART2_Init(void); 172 | void USART_write(int ch); 173 | void DelayTimerUs(int n); 174 | unsigned char SPI_Write(unsigned char data); 175 | void SPI_Send(unsigned char byte); 176 | unsigned char SPI_Receive(void); 177 | unsigned char SPI_Send_Receive(unsigned char byte); 178 | void Write_Register(unsigned char addr, unsigned char data); 179 | unsigned char Read_register(unsigned char addr); 180 | int32_t Read_ADC (void); 181 | void ADS_Init(void); 182 | float CodeToRtd(int32_t code); 183 | float RtdToTemperature(float rtd); 184 | 185 | 186 | #endif /*ADS1220_H_*/ 187 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 SAAD IDRISSI 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PCB1_Pt100.PcbDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saad-elektro/PT100_stm32_baremetal/3426cdcb36e8e712fc5cacc551e1f689f771dcdc/PCB1_Pt100.PcbDoc -------------------------------------------------------------------------------- /PCB2_Pt100.PcbDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saad-elektro/PT100_stm32_baremetal/3426cdcb36e8e712fc5cacc551e1f689f771dcdc/PCB2_Pt100.PcbDoc -------------------------------------------------------------------------------- /PCB_Project.PrjPcb: -------------------------------------------------------------------------------- 1 | [Design] 2 | Version=1.0 3 | HierarchyMode=0 4 | ChannelRoomNamingStyle=0 5 | ReleasesFolder= 6 | ChannelDesignatorFormatString=$Component_$RoomName 7 | ChannelRoomLevelSeperator=_ 8 | OpenOutputs=1 9 | ArchiveProject=0 10 | TimestampOutput=0 11 | SeparateFolders=0 12 | TemplateLocationPath= 13 | PinSwapBy_Netlabel=1 14 | PinSwapBy_Pin=1 15 | AllowPortNetNames=0 16 | AllowSheetEntryNetNames=1 17 | AppendSheetNumberToLocalNets=0 18 | NetlistSinglePinNets=0 19 | DefaultConfiguration=Sources 20 | UserID=0xFFFFFFFF 21 | DefaultPcbProtel=1 22 | DefaultPcbPcad=0 23 | ReorderDocumentsOnCompile=1 24 | NameNetsHierarchically=0 25 | PowerPortNamesTakePriority=0 26 | PushECOToAnnotationFile=1 27 | DItemRevisionGUID= 28 | ReportSuppressedErrorsInMessages=0 29 | FSMCodingStyle=eFMSDropDownList_OneProcess 30 | FSMEncodingStyle=eFMSDropDownList_OneHot 31 | OutputPath= 32 | LogFolderPath= 33 | ManagedProjectGUID= 34 | IncludeDesignInRelease=0 35 | 36 | [Preferences] 37 | PrefsVaultGUID= 38 | PrefsRevisionGUID= 39 | 40 | [Document1] 41 | DocumentPath=Sheet1_Pt100.SchDoc 42 | AnnotationEnabled=1 43 | AnnotateStartValue=1 44 | AnnotationIndexControlEnabled=0 45 | AnnotateSuffix= 46 | AnnotateScope=All 47 | AnnotateOrder=0 48 | DoLibraryUpdate=1 49 | DoDatabaseUpdate=1 50 | ClassGenCCAutoEnabled=1 51 | ClassGenCCAutoRoomEnabled=1 52 | ClassGenNCAutoScope=None 53 | DItemRevisionGUID= 54 | GenerateClassCluster=0 55 | DocumentUniqueId=TMHLTGLT 56 | 57 | [Document2] 58 | DocumentPath=PCB1_Pt100.PcbDoc 59 | AnnotationEnabled=1 60 | AnnotateStartValue=1 61 | AnnotationIndexControlEnabled=0 62 | AnnotateSuffix= 63 | AnnotateScope=All 64 | AnnotateOrder=-1 65 | DoLibraryUpdate=1 66 | DoDatabaseUpdate=1 67 | ClassGenCCAutoEnabled=1 68 | ClassGenCCAutoRoomEnabled=1 69 | ClassGenNCAutoScope=None 70 | DItemRevisionGUID= 71 | GenerateClassCluster=0 72 | DocumentUniqueId=NNISSDMW 73 | 74 | [Document3] 75 | DocumentPath=CAMtastic1.Cam 76 | AnnotationEnabled=1 77 | AnnotateStartValue=1 78 | AnnotationIndexControlEnabled=0 79 | AnnotateSuffix= 80 | AnnotateScope=All 81 | AnnotateOrder=-1 82 | DoLibraryUpdate=1 83 | DoDatabaseUpdate=1 84 | ClassGenCCAutoEnabled=1 85 | ClassGenCCAutoRoomEnabled=1 86 | ClassGenNCAutoScope=None 87 | DItemRevisionGUID= 88 | GenerateClassCluster=0 89 | DocumentUniqueId= 90 | 91 | [Document4] 92 | DocumentPath=CAMtastic2.Cam 93 | AnnotationEnabled=1 94 | AnnotateStartValue=1 95 | AnnotationIndexControlEnabled=0 96 | AnnotateSuffix= 97 | AnnotateScope=All 98 | AnnotateOrder=-1 99 | DoLibraryUpdate=1 100 | DoDatabaseUpdate=1 101 | ClassGenCCAutoEnabled=1 102 | ClassGenCCAutoRoomEnabled=1 103 | ClassGenNCAutoScope=None 104 | DItemRevisionGUID= 105 | GenerateClassCluster=0 106 | DocumentUniqueId= 107 | 108 | [GeneratedDocument1] 109 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.1 110 | DItemRevisionGUID= 111 | 112 | [GeneratedDocument2] 113 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.DRR 114 | DItemRevisionGUID= 115 | 116 | [GeneratedDocument3] 117 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.EXTREP 118 | DItemRevisionGUID= 119 | 120 | [GeneratedDocument4] 121 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GBL 122 | DItemRevisionGUID= 123 | 124 | [GeneratedDocument5] 125 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GBO 126 | DItemRevisionGUID= 127 | 128 | [GeneratedDocument6] 129 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GBP 130 | DItemRevisionGUID= 131 | 132 | [GeneratedDocument7] 133 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GBS 134 | DItemRevisionGUID= 135 | 136 | [GeneratedDocument8] 137 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GKO 138 | DItemRevisionGUID= 139 | 140 | [GeneratedDocument9] 141 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM1 142 | DItemRevisionGUID= 143 | 144 | [GeneratedDocument10] 145 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM2 146 | DItemRevisionGUID= 147 | 148 | [GeneratedDocument11] 149 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM3 150 | DItemRevisionGUID= 151 | 152 | [GeneratedDocument12] 153 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM4 154 | DItemRevisionGUID= 155 | 156 | [GeneratedDocument13] 157 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM7 158 | DItemRevisionGUID= 159 | 160 | [GeneratedDocument14] 161 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM13 162 | DItemRevisionGUID= 163 | 164 | [GeneratedDocument15] 165 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM15 166 | DItemRevisionGUID= 167 | 168 | [GeneratedDocument16] 169 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GM16 170 | DItemRevisionGUID= 171 | 172 | [GeneratedDocument17] 173 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GML 174 | DItemRevisionGUID= 175 | 176 | [GeneratedDocument18] 177 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GPB 178 | DItemRevisionGUID= 179 | 180 | [GeneratedDocument19] 181 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GTL 182 | DItemRevisionGUID= 183 | 184 | [GeneratedDocument20] 185 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GTO 186 | DItemRevisionGUID= 187 | 188 | [GeneratedDocument21] 189 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GTP 190 | DItemRevisionGUID= 191 | 192 | [GeneratedDocument22] 193 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.GTS 194 | DItemRevisionGUID= 195 | 196 | [GeneratedDocument23] 197 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.LDP 198 | DItemRevisionGUID= 199 | 200 | [GeneratedDocument24] 201 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.REP 202 | DItemRevisionGUID= 203 | 204 | [GeneratedDocument25] 205 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.RUL 206 | DItemRevisionGUID= 207 | 208 | [GeneratedDocument26] 209 | DocumentPath=Project Outputs for PCB_Project\PCB1_Pt100.TXT 210 | DItemRevisionGUID= 211 | 212 | [Parameter1] 213 | Name=Title 214 | Value=PT100 iOT Sensor 215 | 216 | [Configuration1] 217 | Name=Sources 218 | ParameterCount=0 219 | ConstraintFileCount=0 220 | ReleaseItemId= 221 | Variant=[No Variations] 222 | OutputJobsCount=0 223 | ContentTypeGUID=CB6F2064-E317-11DF-B822-12313F0024A2 224 | ConfigurationType=Source 225 | 226 | [OutputGroup1] 227 | Name=Netlist Outputs 228 | Description= 229 | TargetPrinter=Microsoft Print to PDF 230 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 231 | OutputType1=CadnetixNetlist 232 | OutputName1=Cadnetix Netlist 233 | OutputDocumentPath1= 234 | OutputVariantName1= 235 | OutputDefault1=0 236 | OutputType2=CalayNetlist 237 | OutputName2=Calay Netlist 238 | OutputDocumentPath2= 239 | OutputVariantName2= 240 | OutputDefault2=0 241 | OutputType3=EDIF 242 | OutputName3=EDIF for PCB 243 | OutputDocumentPath3= 244 | OutputVariantName3= 245 | OutputDefault3=0 246 | OutputType4=EESofNetlist 247 | OutputName4=EESof Netlist 248 | OutputDocumentPath4= 249 | OutputVariantName4= 250 | OutputDefault4=0 251 | OutputType5=IntergraphNetlist 252 | OutputName5=Intergraph Netlist 253 | OutputDocumentPath5= 254 | OutputVariantName5= 255 | OutputDefault5=0 256 | OutputType6=MentorBoardStationNetlist 257 | OutputName6=Mentor BoardStation Netlist 258 | OutputDocumentPath6= 259 | OutputVariantName6= 260 | OutputDefault6=0 261 | OutputType7=MultiWire 262 | OutputName7=MultiWire 263 | OutputDocumentPath7= 264 | OutputVariantName7= 265 | OutputDefault7=0 266 | OutputType8=OrCadPCB2Netlist 267 | OutputName8=Orcad/PCB2 Netlist 268 | OutputDocumentPath8= 269 | OutputVariantName8= 270 | OutputDefault8=0 271 | OutputType9=PADSNetlist 272 | OutputName9=PADS ASCII Netlist 273 | OutputDocumentPath9= 274 | OutputVariantName9= 275 | OutputDefault9=0 276 | OutputType10=Pcad 277 | OutputName10=Pcad for PCB 278 | OutputDocumentPath10= 279 | OutputVariantName10= 280 | OutputDefault10=0 281 | OutputType11=PCADNetlist 282 | OutputName11=PCAD Netlist 283 | OutputDocumentPath11= 284 | OutputVariantName11= 285 | OutputDefault11=0 286 | OutputType12=PCADnltNetlist 287 | OutputName12=PCADnlt Netlist 288 | OutputDocumentPath12= 289 | OutputVariantName12= 290 | OutputDefault12=0 291 | OutputType13=Protel2Netlist 292 | OutputName13=Protel2 Netlist 293 | OutputDocumentPath13= 294 | OutputVariantName13= 295 | OutputDefault13=0 296 | OutputType14=ProtelNetlist 297 | OutputName14=Protel 298 | OutputDocumentPath14= 299 | OutputVariantName14= 300 | OutputDefault14=0 301 | OutputType15=RacalNetlist 302 | OutputName15=Racal Netlist 303 | OutputDocumentPath15= 304 | OutputVariantName15= 305 | OutputDefault15=0 306 | OutputType16=RINFNetlist 307 | OutputName16=RINF Netlist 308 | OutputDocumentPath16= 309 | OutputVariantName16= 310 | OutputDefault16=0 311 | OutputType17=SciCardsNetlist 312 | OutputName17=SciCards Netlist 313 | OutputDocumentPath17= 314 | OutputVariantName17= 315 | OutputDefault17=0 316 | OutputType18=TangoNetlist 317 | OutputName18=Tango Netlist 318 | OutputDocumentPath18= 319 | OutputVariantName18= 320 | OutputDefault18=0 321 | OutputType19=TelesisNetlist 322 | OutputName19=Telesis Netlist 323 | OutputDocumentPath19= 324 | OutputVariantName19= 325 | OutputDefault19=0 326 | OutputType20=WireListNetlist 327 | OutputName20=WireList Netlist 328 | OutputDocumentPath20= 329 | OutputVariantName20= 330 | OutputDefault20=0 331 | 332 | [OutputGroup2] 333 | Name=Simulator Outputs 334 | Description= 335 | TargetPrinter=Microsoft Print to PDF 336 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 337 | 338 | [OutputGroup3] 339 | Name=Documentation Outputs 340 | Description= 341 | TargetPrinter=Virtual Printer 342 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 343 | OutputType1=Composite 344 | OutputName1=Composite Drawing 345 | OutputDocumentPath1= 346 | OutputVariantName1= 347 | OutputDefault1=0 348 | PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 349 | OutputType2=PCB 3D Print 350 | OutputName2=PCB 3D Print 351 | OutputDocumentPath2= 352 | OutputVariantName2=[No Variations] 353 | OutputDefault2=0 354 | PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 355 | OutputType3=PCB 3D Video 356 | OutputName3=PCB 3D Video 357 | OutputDocumentPath3= 358 | OutputVariantName3=[No Variations] 359 | OutputDefault3=0 360 | PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 361 | OutputType4=PCB Print 362 | OutputName4=PCB Prints 363 | OutputDocumentPath4= 364 | OutputVariantName4= 365 | OutputDefault4=0 366 | PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 367 | OutputType5=PCBDrawing 368 | OutputName5=Draftsman 369 | OutputDocumentPath5= 370 | OutputVariantName5=[No Variations] 371 | OutputDefault5=0 372 | PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 373 | OutputType6=PCBLIB Print 374 | OutputName6=PCBLIB Prints 375 | OutputDocumentPath6= 376 | OutputVariantName6= 377 | OutputDefault6=0 378 | PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 379 | OutputType7=PDF3D 380 | OutputName7=PDF3D 381 | OutputDocumentPath7= 382 | OutputVariantName7=[No Variations] 383 | OutputDefault7=0 384 | PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 385 | OutputType8=PDF3D MBA 386 | OutputName8=PDF3D MBA 387 | OutputDocumentPath8= 388 | OutputVariantName8= 389 | OutputDefault8=0 390 | PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 391 | OutputType9=Report Print 392 | OutputName9=Report Prints 393 | OutputDocumentPath9= 394 | OutputVariantName9= 395 | OutputDefault9=0 396 | PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 397 | OutputType10=Schematic Print 398 | OutputName10=Schematic Prints 399 | OutputDocumentPath10= 400 | OutputVariantName10= 401 | OutputDefault10=0 402 | PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 403 | OutputType11=SimView Print 404 | OutputName11=SimView Prints 405 | OutputDocumentPath11= 406 | OutputVariantName11= 407 | OutputDefault11=0 408 | PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 409 | 410 | [OutputGroup4] 411 | Name=Assembly Outputs 412 | Description= 413 | TargetPrinter=Microsoft Print to PDF 414 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 415 | OutputType1=Assembly 416 | OutputName1=Assembly Drawings 417 | OutputDocumentPath1= 418 | OutputVariantName1=[No Variations] 419 | OutputDefault1=0 420 | PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 421 | OutputType2=Pick Place 422 | OutputName2=Generates pick and place files 423 | OutputDocumentPath2= 424 | OutputVariantName2=[No Variations] 425 | OutputDefault2=0 426 | OutputType3=Test Points For Assembly 427 | OutputName3=Test Point Report 428 | OutputDocumentPath3= 429 | OutputVariantName3=[No Variations] 430 | OutputDefault3=0 431 | 432 | [OutputGroup5] 433 | Name=Fabrication Outputs 434 | Description= 435 | TargetPrinter=Microsoft Print to PDF 436 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 437 | OutputType1=CompositeDrill 438 | OutputName1=Composite Drill Drawing 439 | OutputDocumentPath1= 440 | OutputVariantName1= 441 | OutputDefault1=0 442 | PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 443 | OutputType2=Drill 444 | OutputName2=Drill Drawing/Guides 445 | OutputDocumentPath2= 446 | OutputVariantName2= 447 | OutputDefault2=0 448 | PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 449 | OutputType3=Board Stack Report 450 | OutputName3=Report Board Stack 451 | OutputDocumentPath3= 452 | OutputVariantName3= 453 | OutputDefault3=0 454 | PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 455 | OutputType4=Final 456 | OutputName4=Final Artwork Prints 457 | OutputDocumentPath4= 458 | OutputVariantName4=[No Variations] 459 | OutputDefault4=0 460 | PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 461 | OutputType5=Gerber X2 462 | OutputName5=Gerber X2 Files 463 | OutputDocumentPath5= 464 | OutputVariantName5= 465 | OutputDefault5=0 466 | OutputType6=ODB 467 | OutputName6=ODB++ Files 468 | OutputDocumentPath6= 469 | OutputVariantName6=[No Variations] 470 | OutputDefault6=0 471 | OutputType7=Mask 472 | OutputName7=Solder/Paste Mask Prints 473 | OutputDocumentPath7= 474 | OutputVariantName7= 475 | OutputDefault7=0 476 | PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 477 | OutputType8=NC Drill 478 | OutputName8=NC Drill Files 479 | OutputDocumentPath8= 480 | OutputVariantName8= 481 | OutputDefault8=0 482 | Configuration8_Name1=ForceUpdateSettings 483 | Configuration8_Item1=False 484 | Configuration8_Name2=OutputConfigurationParameter1 485 | Configuration8_Item2=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=4|NumberOfUnits=4|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Metric|ZeroesMode=SuppressTrailingZeroes 486 | OutputType9=IPC2581 487 | OutputName9=IPC-2581 Files 488 | OutputDocumentPath9= 489 | OutputVariantName9= 490 | OutputDefault9=0 491 | OutputType10=Plane 492 | OutputName10=Power-Plane Prints 493 | OutputDocumentPath10= 494 | OutputVariantName10= 495 | OutputDefault10=0 496 | PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 497 | OutputType11=Test Points 498 | OutputName11=Test Point Report 499 | OutputDocumentPath11= 500 | OutputVariantName11= 501 | OutputDefault11=0 502 | OutputType12=Gerber 503 | OutputName12=Gerber Files 504 | OutputDocumentPath12= 505 | OutputVariantName12=[No Variations] 506 | OutputDefault12=0 507 | Configuration12_Name1=ForceUpdateSettings 508 | Configuration12_Item1=False 509 | Configuration12_Name2=OutputConfigurationParameter1 510 | Configuration12_Item2=AddToAllLayerClasses.Set= |AddToAllPlots.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|CentrePlots=False|DrillDrawingSymbol=GraphicsSymbol|DrillDrawingSymbolSize=200000|EmbeddedApertures=True|FilmBorderSize=10000000|FilmXSize=200000000|FilmYSize=160000000|FlashAllFills=False|FlashPadShapes=True|G54OnApertureChange=False|GenerateDRCRulesFile=True|GenerateDRCRulesFile=True|GenerateReliefShapes=True|GerberUnit=Metric|GerberUnit=Metric|IncludeUnconnectedMidLayerPads=False|LayerClassesMirror.Set= |LayerClassesPlot.Set="All Layers","Component Layers","Signal Layers","Electrical Layers"|LeadingAndTrailingZeroesMode=SuppressLeadingZeroes|MaxApertureSize=2500000|MinusApertureTolerance=39|MinusApertureTolerance=39|Mirror.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|MirrorDrillDrawingPlots=False|MirrorDrillGuidePlots=False|NoRegularPolygons=False|NumberOfDecimals=4|NumberOfDecimals=4|OptimizeChangeLocationCommands=True|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Panelize=False|Plot.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16973830~1,16973834~1,16777217~1,16842751~1,16973835~1,16973831~1,16908289~1,16908290~1,16908291~1,16908292~1,16908295~1,16908301~1,16908303~1,16908304~1,16973849~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=False|PlotUsedDrillGuideLayerPairs=False|PlusApertureTolerance=39|PlusApertureTolerance=39|Record=GerberView|SoftwareArcs=True|Sorted=False|Sorted=False 511 | 512 | [OutputGroup6] 513 | Name=Report Outputs 514 | Description= 515 | TargetPrinter=Microsoft Print to PDF 516 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 517 | OutputType1=BOM_PartType 518 | OutputName1=Bill of Materials 519 | OutputDocumentPath1= 520 | OutputVariantName1=[No Variations] 521 | OutputDefault1=0 522 | PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 523 | OutputType2=ComponentCrossReference 524 | OutputName2=Component Cross Reference Report 525 | OutputDocumentPath2= 526 | OutputVariantName2=[No Variations] 527 | OutputDefault2=0 528 | OutputType3=ReportHierarchy 529 | OutputName3=Report Project Hierarchy 530 | OutputDocumentPath3= 531 | OutputVariantName3=[No Variations] 532 | OutputDefault3=0 533 | OutputType4=Script 534 | OutputName4=Script Output 535 | OutputDocumentPath4= 536 | OutputVariantName4=[No Variations] 537 | OutputDefault4=0 538 | OutputType5=SimpleBOM 539 | OutputName5=Simple BOM 540 | OutputDocumentPath5= 541 | OutputVariantName5=[No Variations] 542 | OutputDefault5=0 543 | OutputType6=SinglePinNetReporter 544 | OutputName6=Report Single Pin Nets 545 | OutputDocumentPath6= 546 | OutputVariantName6=[No Variations] 547 | OutputDefault6=0 548 | 549 | [OutputGroup7] 550 | Name=Other Outputs 551 | Description= 552 | TargetPrinter=Microsoft Print to PDF 553 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 554 | OutputType1=Text Print 555 | OutputName1=Text Print 556 | OutputDocumentPath1= 557 | OutputVariantName1= 558 | OutputDefault1=0 559 | PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 560 | OutputType2=Text Print 561 | OutputName2=Text Print 562 | OutputDocumentPath2= 563 | OutputVariantName2= 564 | OutputDefault2=0 565 | PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 566 | OutputType3=Text Print 567 | OutputName3=Text Print 568 | OutputDocumentPath3= 569 | OutputVariantName3= 570 | OutputDefault3=0 571 | PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 572 | OutputType4=Text Print 573 | OutputName4=Text Print 574 | OutputDocumentPath4= 575 | OutputVariantName4= 576 | OutputDefault4=0 577 | PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 578 | OutputType5=Text Print 579 | OutputName5=Text Print 580 | OutputDocumentPath5= 581 | OutputVariantName5= 582 | OutputDefault5=0 583 | PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 584 | OutputType6=Text Print 585 | OutputName6=Text Print 586 | OutputDocumentPath6= 587 | OutputVariantName6= 588 | OutputDefault6=0 589 | PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 590 | OutputType7=Text Print 591 | OutputName7=Text Print 592 | OutputDocumentPath7= 593 | OutputVariantName7= 594 | OutputDefault7=0 595 | PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 596 | OutputType8=Text Print 597 | OutputName8=Text Print 598 | OutputDocumentPath8= 599 | OutputVariantName8= 600 | OutputDefault8=0 601 | PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 602 | OutputType9=Text Print 603 | OutputName9=Text Print 604 | OutputDocumentPath9= 605 | OutputVariantName9= 606 | OutputDefault9=0 607 | PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 608 | OutputType10=Text Print 609 | OutputName10=Text Print 610 | OutputDocumentPath10= 611 | OutputVariantName10= 612 | OutputDefault10=0 613 | PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 614 | OutputType11=Text Print 615 | OutputName11=Text Print 616 | OutputDocumentPath11= 617 | OutputVariantName11= 618 | OutputDefault11=0 619 | PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 620 | OutputType12=Text Print 621 | OutputName12=Text Print 622 | OutputDocumentPath12= 623 | OutputVariantName12= 624 | OutputDefault12=0 625 | PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 626 | OutputType13=Text Print 627 | OutputName13=Text Print 628 | OutputDocumentPath13= 629 | OutputVariantName13= 630 | OutputDefault13=0 631 | PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 632 | OutputType14=Text Print 633 | OutputName14=Text Print 634 | OutputDocumentPath14= 635 | OutputVariantName14= 636 | OutputDefault14=0 637 | PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 638 | OutputType15=Text Print 639 | OutputName15=Text Print 640 | OutputDocumentPath15= 641 | OutputVariantName15= 642 | OutputDefault15=0 643 | PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 644 | OutputType16=Text Print 645 | OutputName16=Text Print 646 | OutputDocumentPath16= 647 | OutputVariantName16= 648 | OutputDefault16=0 649 | PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 650 | OutputType17=Text Print 651 | OutputName17=Text Print 652 | OutputDocumentPath17= 653 | OutputVariantName17= 654 | OutputDefault17=0 655 | PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 656 | OutputType18=Text Print 657 | OutputName18=Text Print 658 | OutputDocumentPath18= 659 | OutputVariantName18= 660 | OutputDefault18=0 661 | PageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 662 | OutputType19=Text Print 663 | OutputName19=Text Print 664 | OutputDocumentPath19= 665 | OutputVariantName19= 666 | OutputDefault19=0 667 | PageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 668 | OutputType20=Text Print 669 | OutputName20=Text Print 670 | OutputDocumentPath20= 671 | OutputVariantName20= 672 | OutputDefault20=0 673 | PageOptions20=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 674 | OutputType21=Text Print 675 | OutputName21=Text Print 676 | OutputDocumentPath21= 677 | OutputVariantName21= 678 | OutputDefault21=0 679 | PageOptions21=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 680 | OutputType22=Text Print 681 | OutputName22=Text Print 682 | OutputDocumentPath22= 683 | OutputVariantName22= 684 | OutputDefault22=0 685 | PageOptions22=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 686 | OutputType23=Text Print 687 | OutputName23=Text Print 688 | OutputDocumentPath23= 689 | OutputVariantName23= 690 | OutputDefault23=0 691 | PageOptions23=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 692 | OutputType24=Text Print 693 | OutputName24=Text Print 694 | OutputDocumentPath24= 695 | OutputVariantName24= 696 | OutputDefault24=0 697 | PageOptions24=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 698 | OutputType25=Text Print 699 | OutputName25=Text Print 700 | OutputDocumentPath25= 701 | OutputVariantName25= 702 | OutputDefault25=0 703 | PageOptions25=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 704 | OutputType26=Text Print 705 | OutputName26=Text Print 706 | OutputDocumentPath26= 707 | OutputVariantName26= 708 | OutputDefault26=0 709 | PageOptions26=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 710 | OutputType27=Text Print 711 | OutputName27=Text Print 712 | OutputDocumentPath27= 713 | OutputVariantName27= 714 | OutputDefault27=0 715 | PageOptions27=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 716 | OutputType28=Text Print 717 | OutputName28=Text Print 718 | OutputDocumentPath28= 719 | OutputVariantName28= 720 | OutputDefault28=0 721 | PageOptions28=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 722 | OutputType29=Text Print 723 | OutputName29=Text Print 724 | OutputDocumentPath29= 725 | OutputVariantName29= 726 | OutputDefault29=0 727 | PageOptions29=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 728 | 729 | [OutputGroup8] 730 | Name=Validation Outputs 731 | Description= 732 | TargetPrinter=Microsoft Print to PDF 733 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 734 | OutputType1=BOM_Violations 735 | OutputName1=BOM Checks Report 736 | OutputDocumentPath1= 737 | OutputVariantName1= 738 | OutputDefault1=0 739 | OutputType2=Component states check 740 | OutputName2=Server's components states check 741 | OutputDocumentPath2= 742 | OutputVariantName2= 743 | OutputDefault2=0 744 | OutputType3=Configuration compliance 745 | OutputName3=Environment configuration compliance check 746 | OutputDocumentPath3= 747 | OutputVariantName3= 748 | OutputDefault3=0 749 | OutputType4=Design Rules Check 750 | OutputName4=Design Rules Check 751 | OutputDocumentPath4= 752 | OutputVariantName4= 753 | OutputDefault4=0 754 | PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 755 | OutputType5=Differences Report 756 | OutputName5=Differences Report 757 | OutputDocumentPath5= 758 | OutputVariantName5= 759 | OutputDefault5=0 760 | PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 761 | OutputType6=Electrical Rules Check 762 | OutputName6=Electrical Rules Check 763 | OutputDocumentPath6= 764 | OutputVariantName6= 765 | OutputDefault6=0 766 | PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 767 | OutputType7=Footprint Comparison Report 768 | OutputName7=Footprint Comparison Report 769 | OutputDocumentPath7= 770 | OutputVariantName7= 771 | OutputDefault7=0 772 | 773 | [OutputGroup9] 774 | Name=Export Outputs 775 | Description= 776 | TargetPrinter=Microsoft Print to PDF 777 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 778 | OutputType1=AutoCAD dwg/dxf PCB 779 | OutputName1=AutoCAD dwg/dxf File PCB 780 | OutputDocumentPath1= 781 | OutputVariantName1= 782 | OutputDefault1=0 783 | OutputType2=AutoCAD dwg/dxf Schematic 784 | OutputName2=AutoCAD dwg/dxf File Schematic 785 | OutputDocumentPath2= 786 | OutputVariantName2= 787 | OutputDefault2=0 788 | OutputType3=ExportIDF 789 | OutputName3=Export IDF 790 | OutputDocumentPath3= 791 | OutputVariantName3= 792 | OutputDefault3=0 793 | OutputType4=ExportPARASOLID 794 | OutputName4=Export PARASOLID 795 | OutputDocumentPath4= 796 | OutputVariantName4=[No Variations] 797 | OutputDefault4=0 798 | OutputType5=ExportSTEP 799 | OutputName5=Export STEP 800 | OutputDocumentPath5= 801 | OutputVariantName5=[No Variations] 802 | OutputDefault5=0 803 | OutputType6=ExportVRML 804 | OutputName6=Export VRML 805 | OutputDocumentPath6= 806 | OutputVariantName6=[No Variations] 807 | OutputDefault6=0 808 | OutputType7=MBAExportPARASOLID 809 | OutputName7=Export PARASOLID 810 | OutputDocumentPath7= 811 | OutputVariantName7= 812 | OutputDefault7=0 813 | OutputType8=MBAExportSTEP 814 | OutputName8=Export STEP 815 | OutputDocumentPath8= 816 | OutputVariantName8= 817 | OutputDefault8=0 818 | OutputType9=Save As/Export PCB 819 | OutputName9=Save As/Export PCB 820 | OutputDocumentPath9= 821 | OutputVariantName9= 822 | OutputDefault9=0 823 | OutputType10=Save As/Export Schematic 824 | OutputName10=Save As/Export Schematic 825 | OutputDocumentPath10= 826 | OutputVariantName10= 827 | OutputDefault10=0 828 | OutputType11=Specctra Design PCB 829 | OutputName11=Specctra Design PCB 830 | OutputDocumentPath11= 831 | OutputVariantName11= 832 | OutputDefault11=0 833 | 834 | [OutputGroup10] 835 | Name=PostProcess Outputs 836 | Description= 837 | TargetPrinter=Microsoft Print to PDF 838 | PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1 839 | OutputType1=Copy Files 840 | OutputName1=Copy Files 841 | OutputDocumentPath1= 842 | OutputVariantName1= 843 | OutputDefault1=0 844 | 845 | [Modification Levels] 846 | Type1=1 847 | Type2=1 848 | Type3=1 849 | Type4=1 850 | Type5=1 851 | Type6=1 852 | Type7=1 853 | Type8=1 854 | Type9=1 855 | Type10=1 856 | Type11=1 857 | Type12=1 858 | Type13=1 859 | Type14=1 860 | Type15=1 861 | Type16=1 862 | Type17=1 863 | Type18=1 864 | Type19=1 865 | Type20=1 866 | Type21=1 867 | Type22=1 868 | Type23=1 869 | Type24=1 870 | Type25=1 871 | Type26=1 872 | Type27=1 873 | Type28=1 874 | Type29=1 875 | Type30=1 876 | Type31=1 877 | Type32=1 878 | Type33=1 879 | Type34=1 880 | Type35=1 881 | Type36=1 882 | Type37=1 883 | Type38=1 884 | Type39=1 885 | Type40=1 886 | Type41=1 887 | Type42=1 888 | Type43=1 889 | Type44=1 890 | Type45=1 891 | Type46=1 892 | Type47=1 893 | Type48=1 894 | Type49=1 895 | Type50=1 896 | Type51=1 897 | Type52=1 898 | Type53=1 899 | Type54=1 900 | Type55=1 901 | Type56=1 902 | Type57=1 903 | Type58=1 904 | Type59=1 905 | Type60=1 906 | Type61=1 907 | Type62=1 908 | Type63=1 909 | Type64=1 910 | Type65=1 911 | Type66=1 912 | Type67=1 913 | Type68=1 914 | Type69=1 915 | Type70=1 916 | Type71=1 917 | Type72=1 918 | Type73=1 919 | Type74=1 920 | Type75=1 921 | Type76=1 922 | Type77=1 923 | Type78=1 924 | Type79=1 925 | Type80=1 926 | Type81=1 927 | Type82=1 928 | Type83=1 929 | Type84=1 930 | Type85=1 931 | Type86=1 932 | Type87=1 933 | Type88=1 934 | Type89=1 935 | Type90=1 936 | Type91=1 937 | Type92=1 938 | Type93=1 939 | Type94=1 940 | Type95=1 941 | Type96=1 942 | Type97=1 943 | Type98=1 944 | Type99=1 945 | Type100=1 946 | Type101=1 947 | Type102=1 948 | Type103=1 949 | Type104=1 950 | Type105=1 951 | Type106=1 952 | Type107=1 953 | Type108=1 954 | Type109=1 955 | Type110=1 956 | Type111=1 957 | Type112=1 958 | Type113=1 959 | Type114=1 960 | Type115=1 961 | Type116=1 962 | Type117=1 963 | 964 | [Difference Levels] 965 | Type1=1 966 | Type2=1 967 | Type3=1 968 | Type4=1 969 | Type5=1 970 | Type6=1 971 | Type7=1 972 | Type8=1 973 | Type9=1 974 | Type10=1 975 | Type11=1 976 | Type12=1 977 | Type13=1 978 | Type14=1 979 | Type15=1 980 | Type16=1 981 | Type17=1 982 | Type18=1 983 | Type19=1 984 | Type20=1 985 | Type21=1 986 | Type22=1 987 | Type23=1 988 | Type24=1 989 | Type25=1 990 | Type26=1 991 | Type27=1 992 | Type28=1 993 | Type29=1 994 | Type30=1 995 | Type31=1 996 | Type32=1 997 | Type33=1 998 | Type34=1 999 | Type35=1 1000 | Type36=1 1001 | Type37=1 1002 | Type38=1 1003 | Type39=1 1004 | Type40=1 1005 | Type41=1 1006 | Type42=1 1007 | Type43=1 1008 | Type44=1 1009 | Type45=1 1010 | Type46=1 1011 | Type47=1 1012 | Type48=1 1013 | Type49=1 1014 | Type50=1 1015 | Type51=1 1016 | Type52=1 1017 | Type53=1 1018 | Type54=1 1019 | Type55=1 1020 | Type56=1 1021 | Type57=1 1022 | Type58=1 1023 | Type59=1 1024 | Type60=1 1025 | Type61=1 1026 | Type62=1 1027 | Type63=1 1028 | Type64=1 1029 | Type65=1 1030 | Type66=1 1031 | 1032 | [Electrical Rules Check] 1033 | Type1=1 1034 | Type2=1 1035 | Type3=2 1036 | Type4=1 1037 | Type5=2 1038 | Type6=2 1039 | Type7=1 1040 | Type8=1 1041 | Type9=1 1042 | Type10=1 1043 | Type11=2 1044 | Type12=2 1045 | Type13=2 1046 | Type14=1 1047 | Type15=1 1048 | Type16=1 1049 | Type17=1 1050 | Type18=1 1051 | Type19=1 1052 | Type20=1 1053 | Type21=1 1054 | Type22=1 1055 | Type23=1 1056 | Type24=1 1057 | Type25=2 1058 | Type26=2 1059 | Type27=2 1060 | Type28=1 1061 | Type29=1 1062 | Type30=1 1063 | Type31=1 1064 | Type32=2 1065 | Type33=2 1066 | Type34=2 1067 | Type35=1 1068 | Type36=2 1069 | Type37=1 1070 | Type38=2 1071 | Type39=2 1072 | Type40=2 1073 | Type41=0 1074 | Type42=2 1075 | Type43=1 1076 | Type44=1 1077 | Type45=2 1078 | Type46=1 1079 | Type47=2 1080 | Type48=2 1081 | Type49=1 1082 | Type50=2 1083 | Type51=1 1084 | Type52=1 1085 | Type53=1 1086 | Type54=1 1087 | Type55=1 1088 | Type56=2 1089 | Type57=1 1090 | Type58=1 1091 | Type59=2 1092 | Type60=1 1093 | Type61=2 1094 | Type62=2 1095 | Type63=1 1096 | Type64=0 1097 | Type65=2 1098 | Type66=3 1099 | Type67=2 1100 | Type68=2 1101 | Type69=2 1102 | Type70=2 1103 | Type71=2 1104 | Type72=2 1105 | Type73=2 1106 | Type74=1 1107 | Type75=2 1108 | Type76=1 1109 | Type77=1 1110 | Type78=1 1111 | Type79=1 1112 | Type80=2 1113 | Type81=3 1114 | Type82=3 1115 | Type83=3 1116 | Type84=3 1117 | Type85=3 1118 | Type86=2 1119 | Type87=2 1120 | Type88=2 1121 | Type89=1 1122 | Type90=1 1123 | Type91=3 1124 | Type92=3 1125 | Type93=2 1126 | Type94=2 1127 | Type95=2 1128 | Type96=2 1129 | Type97=2 1130 | Type98=0 1131 | Type99=1 1132 | Type100=2 1133 | Type101=1 1134 | Type102=2 1135 | Type103=2 1136 | Type104=1 1137 | Type105=2 1138 | Type106=2 1139 | Type107=2 1140 | Type108=2 1141 | Type109=1 1142 | Type110=1 1143 | Type111=1 1144 | Type112=1 1145 | Type113=1 1146 | Type114=2 1147 | Type115=2 1148 | Type116=2 1149 | Type117=3 1150 | Type118=3 1151 | Type119=3 1152 | MultiChannelAlternate=2 1153 | AlternateItemFail=3 1154 | Type122=2 1155 | 1156 | [ERC Connection Matrix] 1157 | L1=NNNNNNNNNNNWNNNWW 1158 | L2=NNWNNNNWWWNWNWNWN 1159 | L3=NWEENEEEENEWNEEWN 1160 | L4=NNENNNWEENNWNENWN 1161 | L5=NNNNNNNNNNNNNNNNN 1162 | L6=NNENNNNEENNWNENWN 1163 | L7=NNEWNNWEENNWNENWN 1164 | L8=NWEENEENEEENNEENN 1165 | L9=NWEENEEEENEWNEEWW 1166 | L10=NWNNNNNENNEWNNEWN 1167 | L11=NNENNNNEEENWNENWN 1168 | L12=WWWWNWWNWWWNWWWNN 1169 | L13=NNNNNNNNNNNWNNNWW 1170 | L14=NWEENEEEENEWNEEWW 1171 | L15=NNENNNNEEENWNENWW 1172 | L16=WWWWNWWNWWWNWWWNW 1173 | L17=WNNNNNNNWNNNWWWWN 1174 | 1175 | [Annotate] 1176 | SortOrder=3 1177 | SortLocation=0 1178 | MatchParameter1=Comment 1179 | MatchStrictly1=1 1180 | MatchParameter2=Library Reference 1181 | MatchStrictly2=1 1182 | PhysicalNamingFormat=$Component_$RoomName 1183 | GlobalIndexSortOrder=3 1184 | GlobalIndexSortLocation=0 1185 | 1186 | [PrjClassGen] 1187 | CompClassManualEnabled=0 1188 | CompClassManualRoomEnabled=0 1189 | NetClassAutoBusEnabled=1 1190 | NetClassAutoCompEnabled=0 1191 | NetClassAutoNamedHarnessEnabled=0 1192 | NetClassManualEnabled=1 1193 | NetClassSeparateForBusSections=0 1194 | 1195 | [LibraryUpdateOptions] 1196 | SelectedOnly=0 1197 | UpdateVariants=1 1198 | UpdateToLatestRevision=1 1199 | PartTypes=0 1200 | FullReplace=1 1201 | UpdateDesignatorLock=1 1202 | UpdatePartIDLock=1 1203 | PreserveParameterLocations=1 1204 | PreserveParameterVisibility=1 1205 | DoGraphics=1 1206 | DoParameters=1 1207 | DoModels=1 1208 | AddParameters=0 1209 | RemoveParameters=0 1210 | AddModels=1 1211 | RemoveModels=1 1212 | UpdateCurrentModels=1 1213 | 1214 | [DatabaseUpdateOptions] 1215 | SelectedOnly=0 1216 | UpdateVariants=1 1217 | UpdateToLatestRevision=1 1218 | PartTypes=0 1219 | 1220 | [Comparison Options] 1221 | ComparisonOptions0=Kind=Net|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0 1222 | ComparisonOptions1=Kind=Net Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0 1223 | ComparisonOptions2=Kind=Component Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0 1224 | ComparisonOptions3=Kind=Rule|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0 1225 | ComparisonOptions4=Kind=Differential Pair|MinPercent=50|MinMatch=1|ShowMatch=0|Confirm=0|UseName=0|InclAllRules=0 1226 | ComparisonOptions5=Kind=Structure Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0 1227 | 1228 | [SmartPDF] 1229 | PageOptions=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9 1230 | 1231 | -------------------------------------------------------------------------------- /Project_Documentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saad-elektro/PT100_stm32_baremetal/3426cdcb36e8e712fc5cacc551e1f689f771dcdc/Project_Documentation.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PT100_stm32_baremetal 2 | Temperature sensor using 24-bit ADC_ ADS1220 3 | 4 | It's a prototype for an industrial temperature sensor, based on 3-wire RTD PT100, which offers 5 | the possibility to read the measurements in situ or from a remote terminal, 6 | can be used to keep the traceability of temperature storage for products. 7 | 8 | it can operates from -30°C to 120°C temperature range, 9 | Ensure accuracy measurements +/-0.5°C. 10 | 11 | The sensor is supplied with 2 parallel batteries to increase the capacity, which can ensure 2 Days autonomy in case of main voltage failure 12 | it contains a charging and battery protection circuit. 13 | 14 | a P-channel MOSFET allows the power supply to switche to an external +5v DC source . 15 | 16 | 24-bit ADC from Texas Instruments is used to perform digital conversion. 17 | 18 | Tne hardware is developed with Altium Designer. 19 | 20 | Software Design: 21 | 22 | The firmware is running on an stm32f103 microcontroller, based on ARM-Cortex M3 processor. 23 | and developed under Keil Uvision IDE. 24 | 25 | Various communication protocol was implemented in this project : 26 | - SPI protocol for ADC (bare metal) 27 | - UART protocol for serial communication with the computer (bare metal) 28 | - I2C for LCD (HAL librarie) 29 | 30 | the ADC driver was developped fully with bare metal programming, which allows a direct interaction with the hardware level. 31 | 32 | 33 | The system provides a Wi-Fi connectivity to watch the temperature measurements from a remote terminal, the firmware is still in progress. 34 | ![Photo](https://user-images.githubusercontent.com/58118111/121067596-25b37480-c7c3-11eb-8c2c-4a6165cdfc10.jpg) 35 | ![Photo2](https://user-images.githubusercontent.com/58118111/121067608-2946fb80-c7c3-11eb-9e83-f8322364599b.jpg) 36 | 37 | 38 | -------------------------------------------------------------------------------- /Sheet1_Pt100.SchDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saad-elektro/PT100_stm32_baremetal/3426cdcb36e8e712fc5cacc551e1f689f771dcdc/Sheet1_Pt100.SchDoc -------------------------------------------------------------------------------- /i2c-lcd.c: -------------------------------------------------------------------------------- 1 | 2 | /** Put this in the src folder **/ 3 | 4 | #include "i2c-lcd.h" 5 | #include 6 | #include 7 | #include 8 | 9 | 10 | extern I2C_HandleTypeDef hi2c1; // change your handler here accordingly 11 | 12 | #define SLAVE_ADDRESS_LCD 0x7E // change this according to ur setup 13 | 14 | void lcd_send_cmd (char cmd) 15 | { 16 | char data_u, data_l; 17 | uint8_t data_t[4]; 18 | data_u = (cmd&0xf0); 19 | data_l = ((cmd<<4)&0xf0); 20 | data_t[0] = data_u|0x0C; //en=1, rs=0 21 | data_t[1] = data_u|0x08; //en=0, rs=0 22 | data_t[2] = data_l|0x0C; //en=1, rs=0 23 | data_t[3] = data_l|0x08; //en=0, rs=0 24 | HAL_I2C_Master_Transmit (&hi2c1, SLAVE_ADDRESS_LCD,(uint8_t *) data_t, 4, 100); 25 | } 26 | 27 | void lcd_send_data (char data) 28 | { 29 | char data_u, data_l; 30 | uint8_t data_t[4]; 31 | data_u = (data&0xf0); 32 | data_l = ((data<<4)&0xf0); 33 | data_t[0] = data_u|0x0D; //en=1, rs=0 34 | data_t[1] = data_u|0x09; //en=0, rs=0 35 | data_t[2] = data_l|0x0D; //en=1, rs=0 36 | data_t[3] = data_l|0x09; //en=0, rs=0 37 | HAL_I2C_Master_Transmit (&hi2c1, SLAVE_ADDRESS_LCD,(uint8_t *) data_t, 4, 100); 38 | } 39 | 40 | 41 | 42 | void lcd_clear (void) 43 | { 44 | lcd_send_cmd (0x80); 45 | for (int i=0; i<70; i++) 46 | { 47 | lcd_send_data (' '); 48 | } 49 | } 50 | 51 | void lcd_put_cur(int row, int col) 52 | { 53 | switch (row) 54 | { 55 | case 0: 56 | col |= 0x80; 57 | break; 58 | case 1: 59 | col |= 0xC0; 60 | break; 61 | } 62 | lcd_send_cmd (col); 63 | } 64 | 65 | 66 | void lcd_init (void) 67 | { 68 | // 4 bit initialisation 69 | HAL_Delay(50); // wait for >40ms 70 | lcd_send_cmd (0x30); 71 | HAL_Delay(5); // wait for >4.1ms 72 | lcd_send_cmd (0x30); 73 | HAL_Delay(1); // wait for >100us 74 | lcd_send_cmd (0x30); 75 | HAL_Delay(10); 76 | lcd_send_cmd (0x20); // 4bit mode 77 | HAL_Delay(10); 78 | 79 | // dislay initialisation 80 | lcd_send_cmd (0x28); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters) 81 | HAL_Delay(1); 82 | lcd_send_cmd (0x08); //Display on/off control --> D=0,C=0, B=0 ---> display off 83 | HAL_Delay(1); 84 | lcd_send_cmd (0x01); // clear display 85 | HAL_Delay(1); 86 | HAL_Delay(1); 87 | lcd_send_cmd (0x06); //Entry mode set --> I/D = 1 (increment cursor) & S = 0 (no shift) 88 | HAL_Delay(1); 89 | lcd_send_cmd (0x0C); //Display on/off control --> D = 1, C and B = 0. (Cursor and blink, last two bits) 90 | } 91 | 92 | void lcd_1stLine(void) 93 | { 94 | lcd_put_cur(0,0); 95 | } 96 | 97 | void lcd_2ndLine(void) 98 | { 99 | lcd_put_cur(1,0); 100 | } 101 | 102 | 103 | void lcd_send_string (char *str) 104 | { 105 | while (*str) lcd_send_data (*str++); 106 | } 107 | 108 | 109 | void lcd_i2c_printf(const char* str, ...) 110 | { 111 | char stringArray[20]; 112 | va_list args; 113 | va_start(args, str); 114 | vsprintf(stringArray, str, args); 115 | va_end(args); 116 | for(uint8_t i=0; i 5 | 6 | 7 | int main (void){ 8 | 9 | unsigned char reg0 ,reg1, reg2,reg3 ; 10 | int32_t Raw_Code; 11 | volatile float Rtd_Value; 12 | volatile float temp; 13 | 14 | GPIO_Init(); 15 | USART_Init(); 16 | USART2_Init(); 17 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 18 | 19 | 20 | 21 | ADS_Init(); 22 | 23 | // Write registers 24 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 25 | 26 | DelayTimerUs(2); 27 | 28 | Write_Register(config_REG0_ADDR, 0x08); 29 | DelayTimerUs(2); 30 | Write_Register(config_REG1_ADDR, 0x04); 31 | DelayTimerUs(2); 32 | Write_Register(config_REG2_ADDR, 0x54); 33 | DelayTimerUs(2); 34 | Write_Register(config_REG3_ADDR, 0x70); 35 | DelayTimerUs(2); 36 | 37 | 38 | 39 | // Read back all configurations registers 40 | DelayTimerUs(2); 41 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 42 | DelayTimerUs(2); 43 | 44 | 45 | reg0 = Read_register(config_REG0_ADDR); 46 | DelayTimerUs(5); 47 | 48 | reg1 = Read_register(config_REG1_ADDR); 49 | DelayTimerUs(5); 50 | 51 | reg2 = Read_register(config_REG2_ADDR); 52 | DelayTimerUs(5); 53 | 54 | reg3 = Read_register(config_REG3_ADDR); 55 | DelayTimerUs(5); 56 | 57 | 58 | // Pseudo_Code part 2 59 | 60 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 61 | 62 | SPI_Send(START_SYNC); // Start conversion 63 | DelayTimerUs(0.1); // wait 30ns 64 | GPIOA->BSRR |= GPIO_BSRR_BS4; // clear SPI interface --> Set CS high 65 | 66 | printf_( "%s \n" ,"----SPI TEST----"); 67 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 68 | 69 | while(1){ 70 | 71 | 72 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 73 | DelayTimerUs(100); 74 | Raw_Code = Read_ADC(); 75 | DelayTimerUs(100); 76 | Rtd_Value = CodeToRtd(Raw_Code); 77 | DelayTimerUs(100); 78 | temp = RtdToTemperature(Rtd_Value); 79 | DelayTimerUs(100); 80 | 81 | printf_(" Raw_Code %d \n\r", Raw_Code); 82 | DelayTimerUs(2000000); 83 | DelayTimerUs(2000000); 84 | DelayTimerUs(2000000); 85 | 86 | printf_(" RTD_Value %.4f Ohms \n\r", Rtd_Value); 87 | DelayTimerUs(2000000); 88 | DelayTimerUs(2000000); 89 | 90 | printf_(" Temperature %.4f °C \n\r", temp ) ; 91 | DelayTimerUs(2000000); 92 | DelayTimerUs(2000000); 93 | DelayTimerUs(2000000); 94 | 95 | //-------------------- 96 | 97 | 98 | } 99 | 100 | } 101 | -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | /* USER CODE BEGIN Header */ 2 | /** 3 | ****************************************************************************** 4 | * @file : main.c 5 | * @brief : Main program body 6 | ****************************************************************************** 7 | * @attention 8 | * 9 | *

© Copyright (c) 2019 STMicroelectronics. 10 | * All rights reserved.

11 | * 12 | * This software component is licensed by ST under BSD 3-Clause license, 13 | * the "License"; You may not use this file except in compliance with the 14 | * License. You may obtain a copy of the License at: 15 | * opensource.org/licenses/BSD-3-Clause 16 | * 17 | ****************************************************************************** 18 | */ 19 | /* USER CODE END Header */ 20 | 21 | /* Includes ------------------------------------------------------------------*/ 22 | #include "main.h" 23 | 24 | /* Private includes ----------------------------------------------------------*/ 25 | /* USER CODE BEGIN Includes */ 26 | 27 | #include "i2c-lcd.h" 28 | #include "ADS1220.h" 29 | 30 | /* USER CODE END Includes */ 31 | 32 | /* Private typedef -----------------------------------------------------------*/ 33 | /* USER CODE BEGIN PTD */ 34 | 35 | /* USER CODE END PTD */ 36 | 37 | /* Private define ------------------------------------------------------------*/ 38 | /* USER CODE BEGIN PD */ 39 | /* USER CODE END PD */ 40 | 41 | /* Private macro -------------------------------------------------------------*/ 42 | /* USER CODE BEGIN PM */ 43 | 44 | /* USER CODE END PM */ 45 | 46 | /* Private variables ---------------------------------------------------------*/ 47 | I2C_HandleTypeDef hi2c1; 48 | 49 | /* USER CODE BEGIN PV */ 50 | 51 | /* USER CODE END PV */ 52 | 53 | /* Private function prototypes -----------------------------------------------*/ 54 | void SystemClock_Config(void); 55 | static void MX_GPIO_Init(void); 56 | static void MX_I2C1_Init(void); 57 | /* USER CODE BEGIN PFP */ 58 | 59 | /* USER CODE END PFP */ 60 | 61 | /* Private user code ---------------------------------------------------------*/ 62 | /* USER CODE BEGIN 0 */ 63 | 64 | int row=0; 65 | int col=0; 66 | 67 | /* USER CODE END 0 */ 68 | 69 | /** 70 | * @brief The application entry point. 71 | * @retval int 72 | */ 73 | int main(void) 74 | { 75 | /* USER CODE BEGIN 1 */ 76 | 77 | /* USER CODE END 1 */ 78 | 79 | 80 | /* MCU Configuration--------------------------------------------------------*/ 81 | 82 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 83 | HAL_Init(); 84 | 85 | /* USER CODE BEGIN Init */ 86 | 87 | /* USER CODE END Init */ 88 | 89 | /* Configure the system clock */ 90 | SystemClock_Config(); 91 | 92 | /* USER CODE BEGIN SysInit */ 93 | 94 | /* USER CODE END SysInit */ 95 | 96 | /* Initialize all configured peripherals */ 97 | MX_GPIO_Init(); 98 | MX_I2C1_Init(); 99 | /* USER CODE BEGIN 2 */ 100 | 101 | 102 | unsigned char reg0 ,reg1, reg2,reg3 ; 103 | int32_t Raw_Code; 104 | volatile float Rtd_Value; 105 | volatile float temp; 106 | 107 | GPIO_Init(); 108 | USART2_Init(); 109 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 110 | 111 | 112 | 113 | ADS_Init(); 114 | 115 | // Write registers 116 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 117 | 118 | DelayTimerUs(2); 119 | 120 | Write_Register(config_REG0_ADDR, 0x08); 121 | DelayTimerUs(2); 122 | Write_Register(config_REG1_ADDR, 0x04); 123 | DelayTimerUs(2); 124 | Write_Register(config_REG2_ADDR, 0x54); 125 | DelayTimerUs(2); 126 | Write_Register(config_REG3_ADDR, 0x70); 127 | DelayTimerUs(2); 128 | 129 | 130 | 131 | // Read back all configurations registers 132 | DelayTimerUs(2); 133 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 134 | DelayTimerUs(2); 135 | 136 | 137 | // Pseudo_Code part 2 138 | 139 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 140 | 141 | SPI_Send(START_SYNC); // Start conversion 142 | DelayTimerUs(0.1); // wait 30ns 143 | GPIOA->BSRR |= GPIO_BSRR_BS4; // clear SPI interface --> Set CS high 144 | 145 | //printf_( "%s \n" ,"----SPI TEST----"); 146 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 147 | 148 | 149 | 150 | 151 | 152 | lcd_init (); 153 | 154 | lcd_i2c_printf("PT100 Sensor"); 155 | 156 | //lcd_send_string ("HELLO WORLD"); 157 | 158 | HAL_Delay(1000); 159 | 160 | lcd_put_cur(1, 0); 161 | 162 | // lcd_send_string("from CTECH"); 163 | 164 | HAL_Delay(2000); 165 | 166 | lcd_clear (); 167 | 168 | 169 | /* USER CODE END 2 */ 170 | 171 | /* Infinite loop */ 172 | /* USER CODE BEGIN WHILE */ 173 | while (1) 174 | { 175 | /* USER CODE END WHILE */ 176 | 177 | 178 | GPIOA->BSRR |= GPIO_BSRR_BR4; // Set CS Low 179 | DelayTimerUs(100); 180 | Raw_Code = Read_ADC(); 181 | DelayTimerUs(100); 182 | Rtd_Value = CodeToRtd(Raw_Code); 183 | DelayTimerUs(100); 184 | temp = RtdToTemperature(Rtd_Value); 185 | DelayTimerUs(100); 186 | 187 | 188 | lcd_1stLine(); 189 | 190 | lcd_i2c_printf("Local temperature : " ) ; 191 | 192 | //lcd_i2c_printf(" Temp %.3f ", 3.232 ) ; 193 | lcd_2ndLine(); 194 | 195 | lcd_i2c_printf(" %.4f Degree ", temp ) ; 196 | 197 | 198 | //lcd_i2c_printf("Temp = %.3f", temp); 199 | HAL_Delay(1000); 200 | 201 | 202 | } 203 | 204 | } 205 | 206 | /** 207 | * @brief System Clock Configuration 208 | * @retval None 209 | */ 210 | void SystemClock_Config(void) 211 | { 212 | RCC_OscInitTypeDef RCC_OscInitStruct = {0}; 213 | RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 214 | 215 | /** Initializes the CPU, AHB and APB busses clocks 216 | */ 217 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; 218 | RCC_OscInitStruct.HSEState = RCC_HSE_ON; 219 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; 220 | RCC_OscInitStruct.HSIState = RCC_HSI_ON; 221 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; 222 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; 223 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; 224 | if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 225 | { 226 | Error_Handler(); 227 | } 228 | /** Initializes the CPU, AHB and APB busses clocks 229 | */ 230 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK 231 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; 232 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 233 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 234 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; 235 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; 236 | 237 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) 238 | { 239 | Error_Handler(); 240 | } 241 | } 242 | 243 | /** 244 | * @brief I2C1 Initialization Function 245 | * @param None 246 | * @retval None 247 | */ 248 | static void MX_I2C1_Init(void) 249 | { 250 | 251 | /* USER CODE BEGIN I2C1_Init 0 */ 252 | 253 | /* USER CODE END I2C1_Init 0 */ 254 | 255 | /* USER CODE BEGIN I2C1_Init 1 */ 256 | 257 | /* USER CODE END I2C1_Init 1 */ 258 | hi2c1.Instance = I2C1; 259 | hi2c1.Init.ClockSpeed = 100000; 260 | hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; 261 | hi2c1.Init.OwnAddress1 = 0; 262 | hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; 263 | hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; 264 | hi2c1.Init.OwnAddress2 = 0; 265 | hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; 266 | hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; 267 | if (HAL_I2C_Init(&hi2c1) != HAL_OK) 268 | { 269 | Error_Handler(); 270 | } 271 | /* USER CODE BEGIN I2C1_Init 2 */ 272 | 273 | /* USER CODE END I2C1_Init 2 */ 274 | 275 | } 276 | 277 | /** 278 | * @brief GPIO Initialization Function 279 | * @param None 280 | * @retval None 281 | */ 282 | static void MX_GPIO_Init(void) 283 | { 284 | 285 | /* GPIO Ports Clock Enable */ 286 | __HAL_RCC_GPIOD_CLK_ENABLE(); 287 | __HAL_RCC_GPIOA_CLK_ENABLE(); 288 | __HAL_RCC_GPIOB_CLK_ENABLE(); 289 | 290 | } 291 | 292 | /* USER CODE BEGIN 4 */ 293 | 294 | /* USER CODE END 4 */ 295 | 296 | /** 297 | * @brief This function is executed in case of error occurrence. 298 | * @retval None 299 | */ 300 | void Error_Handler(void) 301 | { 302 | /* USER CODE BEGIN Error_Handler_Debug */ 303 | /* User can add his own implementation to report the HAL error return state */ 304 | 305 | /* USER CODE END Error_Handler_Debug */ 306 | } 307 | 308 | #ifdef USE_FULL_ASSERT 309 | /** 310 | * @brief Reports the name of the source file and the source line number 311 | * where the assert_param error has occurred. 312 | * @param file: pointer to the source file name 313 | * @param line: assert_param error line source number 314 | * @retval None 315 | */ 316 | void assert_failed(uint8_t *file, uint32_t line) 317 | { 318 | /* USER CODE BEGIN 6 */ 319 | /* User can add his own implementation to report the file name and line number, 320 | tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 321 | /* USER CODE END 6 */ 322 | } 323 | #endif /* USE_FULL_ASSERT */ 324 | 325 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 326 | -------------------------------------------------------------------------------- /stm32f1xx_hal_msp.c: -------------------------------------------------------------------------------- 1 | /* USER CODE BEGIN Header */ 2 | /** 3 | ****************************************************************************** 4 | * File Name : stm32f1xx_hal_msp.c 5 | * Description : This file provides code for the MSP Initialization 6 | * and de-Initialization codes. 7 | ****************************************************************************** 8 | * @attention 9 | * 10 | *

© Copyright (c) 2021 STMicroelectronics. 11 | * All rights reserved.

12 | * 13 | * This software component is licensed by ST under BSD 3-Clause license, 14 | * the "License"; You may not use this file except in compliance with the 15 | * License. You may obtain a copy of the License at: 16 | * opensource.org/licenses/BSD-3-Clause 17 | * 18 | ****************************************************************************** 19 | */ 20 | /* USER CODE END Header */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "main.h" 24 | /* USER CODE BEGIN Includes */ 25 | 26 | /* USER CODE END Includes */ 27 | 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* USER CODE BEGIN TD */ 30 | 31 | /* USER CODE END TD */ 32 | 33 | /* Private define ------------------------------------------------------------*/ 34 | /* USER CODE BEGIN Define */ 35 | 36 | /* USER CODE END Define */ 37 | 38 | /* Private macro -------------------------------------------------------------*/ 39 | /* USER CODE BEGIN Macro */ 40 | 41 | /* USER CODE END Macro */ 42 | 43 | /* Private variables ---------------------------------------------------------*/ 44 | /* USER CODE BEGIN PV */ 45 | 46 | /* USER CODE END PV */ 47 | 48 | /* Private function prototypes -----------------------------------------------*/ 49 | /* USER CODE BEGIN PFP */ 50 | 51 | /* USER CODE END PFP */ 52 | 53 | /* External functions --------------------------------------------------------*/ 54 | /* USER CODE BEGIN ExternalFunctions */ 55 | 56 | /* USER CODE END ExternalFunctions */ 57 | 58 | /* USER CODE BEGIN 0 */ 59 | 60 | /* USER CODE END 0 */ 61 | /** 62 | * Initializes the Global MSP. 63 | */ 64 | void HAL_MspInit(void) 65 | { 66 | /* USER CODE BEGIN MspInit 0 */ 67 | 68 | /* USER CODE END MspInit 0 */ 69 | 70 | __HAL_RCC_AFIO_CLK_ENABLE(); 71 | __HAL_RCC_PWR_CLK_ENABLE(); 72 | 73 | /* System interrupt init*/ 74 | 75 | /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled 76 | */ 77 | __HAL_AFIO_REMAP_SWJ_NOJTAG(); 78 | 79 | /* USER CODE BEGIN MspInit 1 */ 80 | 81 | /* USER CODE END MspInit 1 */ 82 | } 83 | 84 | /** 85 | * @brief I2C MSP Initialization 86 | * This function configures the hardware resources used in this example 87 | * @param hi2c: I2C handle pointer 88 | * @retval None 89 | */ 90 | void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) 91 | { 92 | GPIO_InitTypeDef GPIO_InitStruct = {0}; 93 | if(hi2c->Instance==I2C1) 94 | { 95 | /* USER CODE BEGIN I2C1_MspInit 0 */ 96 | 97 | /* USER CODE END I2C1_MspInit 0 */ 98 | 99 | __HAL_RCC_GPIOB_CLK_ENABLE(); 100 | /**I2C1 GPIO Configuration 101 | PB6 ------> I2C1_SCL 102 | PB7 ------> I2C1_SDA 103 | */ 104 | GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; 105 | GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; 106 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; 107 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 108 | 109 | /* Peripheral clock enable */ 110 | __HAL_RCC_I2C1_CLK_ENABLE(); 111 | /* USER CODE BEGIN I2C1_MspInit 1 */ 112 | 113 | /* USER CODE END I2C1_MspInit 1 */ 114 | } 115 | 116 | } 117 | 118 | /** 119 | * @brief I2C MSP De-Initialization 120 | * This function freeze the hardware resources used in this example 121 | * @param hi2c: I2C handle pointer 122 | * @retval None 123 | */ 124 | void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) 125 | { 126 | if(hi2c->Instance==I2C1) 127 | { 128 | /* USER CODE BEGIN I2C1_MspDeInit 0 */ 129 | 130 | /* USER CODE END I2C1_MspDeInit 0 */ 131 | /* Peripheral clock disable */ 132 | __HAL_RCC_I2C1_CLK_DISABLE(); 133 | 134 | /**I2C1 GPIO Configuration 135 | PB6 ------> I2C1_SCL 136 | PB7 ------> I2C1_SDA 137 | */ 138 | HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7); 139 | 140 | /* USER CODE BEGIN I2C1_MspDeInit 1 */ 141 | 142 | /* USER CODE END I2C1_MspDeInit 1 */ 143 | } 144 | 145 | } 146 | 147 | /* USER CODE BEGIN 1 */ 148 | 149 | /* USER CODE END 1 */ 150 | 151 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 152 | -------------------------------------------------------------------------------- /stm32f1xx_it.c: -------------------------------------------------------------------------------- 1 | /* USER CODE BEGIN Header */ 2 | /** 3 | ****************************************************************************** 4 | * @file stm32f1xx_it.c 5 | * @brief Interrupt Service Routines. 6 | ****************************************************************************** 7 | * @attention 8 | * 9 | *

© Copyright (c) 2021 STMicroelectronics. 10 | * All rights reserved.

11 | * 12 | * This software component is licensed by ST under BSD 3-Clause license, 13 | * the "License"; You may not use this file except in compliance with the 14 | * License. You may obtain a copy of the License at: 15 | * opensource.org/licenses/BSD-3-Clause 16 | * 17 | ****************************************************************************** 18 | */ 19 | /* USER CODE END Header */ 20 | 21 | /* Includes ------------------------------------------------------------------*/ 22 | #include "main.h" 23 | #include "stm32f1xx_it.h" 24 | /* Private includes ----------------------------------------------------------*/ 25 | /* USER CODE BEGIN Includes */ 26 | /* USER CODE END Includes */ 27 | 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* USER CODE BEGIN TD */ 30 | 31 | /* USER CODE END TD */ 32 | 33 | /* Private define ------------------------------------------------------------*/ 34 | /* USER CODE BEGIN PD */ 35 | 36 | /* USER CODE END PD */ 37 | 38 | /* Private macro -------------------------------------------------------------*/ 39 | /* USER CODE BEGIN PM */ 40 | 41 | /* USER CODE END PM */ 42 | 43 | /* Private variables ---------------------------------------------------------*/ 44 | /* USER CODE BEGIN PV */ 45 | 46 | /* USER CODE END PV */ 47 | 48 | /* Private function prototypes -----------------------------------------------*/ 49 | /* USER CODE BEGIN PFP */ 50 | 51 | /* USER CODE END PFP */ 52 | 53 | /* Private user code ---------------------------------------------------------*/ 54 | /* USER CODE BEGIN 0 */ 55 | 56 | /* USER CODE END 0 */ 57 | 58 | /* External variables --------------------------------------------------------*/ 59 | 60 | /* USER CODE BEGIN EV */ 61 | 62 | /* USER CODE END EV */ 63 | 64 | /******************************************************************************/ 65 | /* Cortex-M3 Processor Interruption and Exception Handlers */ 66 | /******************************************************************************/ 67 | /** 68 | * @brief This function handles Non maskable interrupt. 69 | */ 70 | void NMI_Handler(void) 71 | { 72 | /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ 73 | 74 | /* USER CODE END NonMaskableInt_IRQn 0 */ 75 | /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ 76 | 77 | /* USER CODE END NonMaskableInt_IRQn 1 */ 78 | } 79 | 80 | /** 81 | * @brief This function handles Hard fault interrupt. 82 | */ 83 | void HardFault_Handler(void) 84 | { 85 | /* USER CODE BEGIN HardFault_IRQn 0 */ 86 | 87 | /* USER CODE END HardFault_IRQn 0 */ 88 | while (1) 89 | { 90 | /* USER CODE BEGIN W1_HardFault_IRQn 0 */ 91 | /* USER CODE END W1_HardFault_IRQn 0 */ 92 | } 93 | } 94 | 95 | /** 96 | * @brief This function handles Memory management fault. 97 | */ 98 | void MemManage_Handler(void) 99 | { 100 | /* USER CODE BEGIN MemoryManagement_IRQn 0 */ 101 | 102 | /* USER CODE END MemoryManagement_IRQn 0 */ 103 | while (1) 104 | { 105 | /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ 106 | /* USER CODE END W1_MemoryManagement_IRQn 0 */ 107 | } 108 | } 109 | 110 | /** 111 | * @brief This function handles Prefetch fault, memory access fault. 112 | */ 113 | void BusFault_Handler(void) 114 | { 115 | /* USER CODE BEGIN BusFault_IRQn 0 */ 116 | 117 | /* USER CODE END BusFault_IRQn 0 */ 118 | while (1) 119 | { 120 | /* USER CODE BEGIN W1_BusFault_IRQn 0 */ 121 | /* USER CODE END W1_BusFault_IRQn 0 */ 122 | } 123 | } 124 | 125 | /** 126 | * @brief This function handles Undefined instruction or illegal state. 127 | */ 128 | void UsageFault_Handler(void) 129 | { 130 | /* USER CODE BEGIN UsageFault_IRQn 0 */ 131 | 132 | /* USER CODE END UsageFault_IRQn 0 */ 133 | while (1) 134 | { 135 | /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ 136 | /* USER CODE END W1_UsageFault_IRQn 0 */ 137 | } 138 | } 139 | 140 | /** 141 | * @brief This function handles System service call via SWI instruction. 142 | */ 143 | void SVC_Handler(void) 144 | { 145 | /* USER CODE BEGIN SVCall_IRQn 0 */ 146 | 147 | /* USER CODE END SVCall_IRQn 0 */ 148 | /* USER CODE BEGIN SVCall_IRQn 1 */ 149 | 150 | /* USER CODE END SVCall_IRQn 1 */ 151 | } 152 | 153 | /** 154 | * @brief This function handles Debug monitor. 155 | */ 156 | void DebugMon_Handler(void) 157 | { 158 | /* USER CODE BEGIN DebugMonitor_IRQn 0 */ 159 | 160 | /* USER CODE END DebugMonitor_IRQn 0 */ 161 | /* USER CODE BEGIN DebugMonitor_IRQn 1 */ 162 | 163 | /* USER CODE END DebugMonitor_IRQn 1 */ 164 | } 165 | 166 | /** 167 | * @brief This function handles Pendable request for system service. 168 | */ 169 | void PendSV_Handler(void) 170 | { 171 | /* USER CODE BEGIN PendSV_IRQn 0 */ 172 | 173 | /* USER CODE END PendSV_IRQn 0 */ 174 | /* USER CODE BEGIN PendSV_IRQn 1 */ 175 | 176 | /* USER CODE END PendSV_IRQn 1 */ 177 | } 178 | 179 | /** 180 | * @brief This function handles System tick timer. 181 | */ 182 | void SysTick_Handler(void) 183 | { 184 | /* USER CODE BEGIN SysTick_IRQn 0 */ 185 | 186 | /* USER CODE END SysTick_IRQn 0 */ 187 | HAL_IncTick(); 188 | /* USER CODE BEGIN SysTick_IRQn 1 */ 189 | 190 | /* USER CODE END SysTick_IRQn 1 */ 191 | } 192 | 193 | /******************************************************************************/ 194 | /* STM32F1xx Peripheral Interrupt Handlers */ 195 | /* Add here the Interrupt Handlers for the used peripherals. */ 196 | /* For the available peripheral interrupt handler names, */ 197 | /* please refer to the startup file (startup_stm32f1xx.s). */ 198 | /******************************************************************************/ 199 | 200 | /* USER CODE BEGIN 1 */ 201 | 202 | /* USER CODE END 1 */ 203 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 204 | -------------------------------------------------------------------------------- /system_stm32f1xx.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file system_stm32f1xx.c 4 | * @author MCD Application Team 5 | * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. 6 | * 7 | * 1. This file provides two functions and one global variable to be called from 8 | * user application: 9 | * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier 10 | * factors, AHB/APBx prescalers and Flash settings). 11 | * This function is called at startup just after reset and 12 | * before branch to main program. This call is made inside 13 | * the "startup_stm32f1xx_xx.s" file. 14 | * 15 | * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used 16 | * by the user application to setup the SysTick 17 | * timer or configure other parameters. 18 | * 19 | * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must 20 | * be called whenever the core clock is changed 21 | * during program execution. 22 | * 23 | * 2. After each device reset the HSI (8 MHz) is used as system clock source. 24 | * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to 25 | * configure the system clock before to branch to main program. 26 | * 27 | * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on 28 | * the product used), refer to "HSE_VALUE". 29 | * When HSE is used as system clock source, directly or through PLL, and you 30 | * are using different crystal you have to adapt the HSE value to your own 31 | * configuration. 32 | * 33 | ****************************************************************************** 34 | * @attention 35 | * 36 | *

© Copyright (c) 2017 STMicroelectronics. 37 | * All rights reserved.

38 | * 39 | * This software component is licensed by ST under BSD 3-Clause license, 40 | * the "License"; You may not use this file except in compliance with the 41 | * License. You may obtain a copy of the License at: 42 | * opensource.org/licenses/BSD-3-Clause 43 | * 44 | ****************************************************************************** 45 | */ 46 | 47 | /** @addtogroup CMSIS 48 | * @{ 49 | */ 50 | 51 | /** @addtogroup stm32f1xx_system 52 | * @{ 53 | */ 54 | 55 | /** @addtogroup STM32F1xx_System_Private_Includes 56 | * @{ 57 | */ 58 | 59 | #include "stm32f1xx.h" 60 | 61 | /** 62 | * @} 63 | */ 64 | 65 | /** @addtogroup STM32F1xx_System_Private_TypesDefinitions 66 | * @{ 67 | */ 68 | 69 | /** 70 | * @} 71 | */ 72 | 73 | /** @addtogroup STM32F1xx_System_Private_Defines 74 | * @{ 75 | */ 76 | 77 | #if !defined (HSE_VALUE) 78 | #define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. 79 | This value can be provided and adapted by the user application. */ 80 | #endif /* HSE_VALUE */ 81 | 82 | #if !defined (HSI_VALUE) 83 | #define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. 84 | This value can be provided and adapted by the user application. */ 85 | #endif /* HSI_VALUE */ 86 | 87 | /*!< Uncomment the following line if you need to use external SRAM */ 88 | #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) 89 | /* #define DATA_IN_ExtSRAM */ 90 | #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ 91 | 92 | /* Note: Following vector table addresses must be defined in line with linker 93 | configuration. */ 94 | /*!< Uncomment the following line if you need to relocate the vector table 95 | anywhere in Flash or Sram, else the vector table is kept at the automatic 96 | remap of boot address selected */ 97 | /* #define USER_VECT_TAB_ADDRESS */ 98 | 99 | #if defined(USER_VECT_TAB_ADDRESS) 100 | /*!< Uncomment the following line if you need to relocate your vector Table 101 | in Sram else user remap will be done in Flash. */ 102 | /* #define VECT_TAB_SRAM */ 103 | #if defined(VECT_TAB_SRAM) 104 | #define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. 105 | This value must be a multiple of 0x200. */ 106 | #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. 107 | This value must be a multiple of 0x200. */ 108 | #else 109 | #define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. 110 | This value must be a multiple of 0x200. */ 111 | #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. 112 | This value must be a multiple of 0x200. */ 113 | #endif /* VECT_TAB_SRAM */ 114 | #endif /* USER_VECT_TAB_ADDRESS */ 115 | 116 | /******************************************************************************/ 117 | 118 | /** 119 | * @} 120 | */ 121 | 122 | /** @addtogroup STM32F1xx_System_Private_Macros 123 | * @{ 124 | */ 125 | 126 | /** 127 | * @} 128 | */ 129 | 130 | /** @addtogroup STM32F1xx_System_Private_Variables 131 | * @{ 132 | */ 133 | 134 | /* This variable is updated in three ways: 135 | 1) by calling CMSIS function SystemCoreClockUpdate() 136 | 2) by calling HAL API function HAL_RCC_GetHCLKFreq() 137 | 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 138 | Note: If you use this function to configure the system clock; then there 139 | is no need to call the 2 first functions listed above, since SystemCoreClock 140 | variable is updated automatically. 141 | */ 142 | uint32_t SystemCoreClock = 16000000; 143 | const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; 144 | const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; 145 | 146 | /** 147 | * @} 148 | */ 149 | 150 | /** @addtogroup STM32F1xx_System_Private_FunctionPrototypes 151 | * @{ 152 | */ 153 | 154 | #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) 155 | #ifdef DATA_IN_ExtSRAM 156 | static void SystemInit_ExtMemCtl(void); 157 | #endif /* DATA_IN_ExtSRAM */ 158 | #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ 159 | 160 | /** 161 | * @} 162 | */ 163 | 164 | /** @addtogroup STM32F1xx_System_Private_Functions 165 | * @{ 166 | */ 167 | 168 | /** 169 | * @brief Setup the microcontroller system 170 | * Initialize the Embedded Flash Interface, the PLL and update the 171 | * SystemCoreClock variable. 172 | * @note This function should be used only after reset. 173 | * @param None 174 | * @retval None 175 | */ 176 | void SystemInit (void) 177 | { 178 | #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) 179 | #ifdef DATA_IN_ExtSRAM 180 | SystemInit_ExtMemCtl(); 181 | #endif /* DATA_IN_ExtSRAM */ 182 | #endif 183 | 184 | /* Configure the Vector Table location -------------------------------------*/ 185 | #if defined(USER_VECT_TAB_ADDRESS) 186 | SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ 187 | #endif /* USER_VECT_TAB_ADDRESS */ 188 | } 189 | 190 | /** 191 | * @brief Update SystemCoreClock variable according to Clock Register Values. 192 | * The SystemCoreClock variable contains the core clock (HCLK), it can 193 | * be used by the user application to setup the SysTick timer or configure 194 | * other parameters. 195 | * 196 | * @note Each time the core clock (HCLK) changes, this function must be called 197 | * to update SystemCoreClock variable value. Otherwise, any configuration 198 | * based on this variable will be incorrect. 199 | * 200 | * @note - The system frequency computed by this function is not the real 201 | * frequency in the chip. It is calculated based on the predefined 202 | * constant and the selected clock source: 203 | * 204 | * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) 205 | * 206 | * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) 207 | * 208 | * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) 209 | * or HSI_VALUE(*) multiplied by the PLL factors. 210 | * 211 | * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value 212 | * 8 MHz) but the real value may vary depending on the variations 213 | * in voltage and temperature. 214 | * 215 | * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value 216 | * 8 MHz or 25 MHz, depending on the product used), user has to ensure 217 | * that HSE_VALUE is same as the real frequency of the crystal used. 218 | * Otherwise, this function may have wrong result. 219 | * 220 | * - The result of this function could be not correct when using fractional 221 | * value for HSE crystal. 222 | * @param None 223 | * @retval None 224 | */ 225 | void SystemCoreClockUpdate (void) 226 | { 227 | uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U; 228 | 229 | #if defined(STM32F105xC) || defined(STM32F107xC) 230 | uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; 231 | #endif /* STM32F105xC */ 232 | 233 | #if defined(STM32F100xB) || defined(STM32F100xE) 234 | uint32_t prediv1factor = 0U; 235 | #endif /* STM32F100xB or STM32F100xE */ 236 | 237 | /* Get SYSCLK source -------------------------------------------------------*/ 238 | tmp = RCC->CFGR & RCC_CFGR_SWS; 239 | 240 | switch (tmp) 241 | { 242 | case 0x00U: /* HSI used as system clock */ 243 | SystemCoreClock = HSI_VALUE; 244 | break; 245 | case 0x04U: /* HSE used as system clock */ 246 | SystemCoreClock = HSE_VALUE; 247 | break; 248 | case 0x08U: /* PLL used as system clock */ 249 | 250 | /* Get PLL clock source and multiplication factor ----------------------*/ 251 | pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; 252 | pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; 253 | 254 | #if !defined(STM32F105xC) && !defined(STM32F107xC) 255 | pllmull = ( pllmull >> 18U) + 2U; 256 | 257 | if (pllsource == 0x00U) 258 | { 259 | /* HSI oscillator clock divided by 2 selected as PLL clock entry */ 260 | SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; 261 | } 262 | else 263 | { 264 | #if defined(STM32F100xB) || defined(STM32F100xE) 265 | prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; 266 | /* HSE oscillator clock selected as PREDIV1 clock entry */ 267 | SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; 268 | #else 269 | /* HSE selected as PLL clock entry */ 270 | if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) 271 | {/* HSE oscillator clock divided by 2 */ 272 | SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; 273 | } 274 | else 275 | { 276 | SystemCoreClock = HSE_VALUE * pllmull; 277 | } 278 | #endif 279 | } 280 | #else 281 | pllmull = pllmull >> 18U; 282 | 283 | if (pllmull != 0x0DU) 284 | { 285 | pllmull += 2U; 286 | } 287 | else 288 | { /* PLL multiplication factor = PLL input clock * 6.5 */ 289 | pllmull = 13U / 2U; 290 | } 291 | 292 | if (pllsource == 0x00U) 293 | { 294 | /* HSI oscillator clock divided by 2 selected as PLL clock entry */ 295 | SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; 296 | } 297 | else 298 | {/* PREDIV1 selected as PLL clock entry */ 299 | 300 | /* Get PREDIV1 clock source and division factor */ 301 | prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; 302 | prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; 303 | 304 | if (prediv1source == 0U) 305 | { 306 | /* HSE oscillator clock selected as PREDIV1 clock entry */ 307 | SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; 308 | } 309 | else 310 | {/* PLL2 clock selected as PREDIV1 clock entry */ 311 | 312 | /* Get PREDIV2 division factor and PLL2 multiplication factor */ 313 | prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; 314 | pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; 315 | SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; 316 | } 317 | } 318 | #endif /* STM32F105xC */ 319 | break; 320 | 321 | default: 322 | SystemCoreClock = HSI_VALUE; 323 | break; 324 | } 325 | 326 | /* Compute HCLK clock frequency ----------------*/ 327 | /* Get HCLK prescaler */ 328 | tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; 329 | /* HCLK clock frequency */ 330 | SystemCoreClock >>= tmp; 331 | } 332 | 333 | #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) 334 | /** 335 | * @brief Setup the external memory controller. Called in startup_stm32f1xx.s 336 | * before jump to __main 337 | * @param None 338 | * @retval None 339 | */ 340 | #ifdef DATA_IN_ExtSRAM 341 | /** 342 | * @brief Setup the external memory controller. 343 | * Called in startup_stm32f1xx_xx.s/.c before jump to main. 344 | * This function configures the external SRAM mounted on STM3210E-EVAL 345 | * board (STM32 High density devices). This SRAM will be used as program 346 | * data memory (including heap and stack). 347 | * @param None 348 | * @retval None 349 | */ 350 | void SystemInit_ExtMemCtl(void) 351 | { 352 | __IO uint32_t tmpreg; 353 | /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is 354 | required, then adjust the Register Addresses */ 355 | 356 | /* Enable FSMC clock */ 357 | RCC->AHBENR = 0x00000114U; 358 | 359 | /* Delay after an RCC peripheral clock enabling */ 360 | tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); 361 | 362 | /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ 363 | RCC->APB2ENR = 0x000001E0U; 364 | 365 | /* Delay after an RCC peripheral clock enabling */ 366 | tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); 367 | 368 | (void)(tmpreg); 369 | 370 | /* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ 371 | /*---------------- SRAM Address lines configuration -------------------------*/ 372 | /*---------------- NOE and NWE configuration --------------------------------*/ 373 | /*---------------- NE3 configuration ----------------------------------------*/ 374 | /*---------------- NBL0, NBL1 configuration ---------------------------------*/ 375 | 376 | GPIOD->CRL = 0x44BB44BBU; 377 | GPIOD->CRH = 0xBBBBBBBBU; 378 | 379 | GPIOE->CRL = 0xB44444BBU; 380 | GPIOE->CRH = 0xBBBBBBBBU; 381 | 382 | GPIOF->CRL = 0x44BBBBBBU; 383 | GPIOF->CRH = 0xBBBB4444U; 384 | 385 | GPIOG->CRL = 0x44BBBBBBU; 386 | GPIOG->CRH = 0x444B4B44U; 387 | 388 | /*---------------- FSMC Configuration ---------------------------------------*/ 389 | /*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ 390 | 391 | FSMC_Bank1->BTCR[4U] = 0x00001091U; 392 | FSMC_Bank1->BTCR[5U] = 0x00110212U; 393 | } 394 | #endif /* DATA_IN_ExtSRAM */ 395 | #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ 396 | 397 | /** 398 | * @} 399 | */ 400 | 401 | /** 402 | * @} 403 | */ 404 | 405 | /** 406 | * @} 407 | */ 408 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 409 | --------------------------------------------------------------------------------